Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.09.05;
Скачать: CL | DM;

Вниз

SetEvent для сигнализации нескольким потокам.   Найти похожие ветки 

 
Дмитрий С ©   (2009-04-16 08:43) [0]

Есть Event и крит. секция:
FObjectEvent = CreateEvent(nil, True{ManualReset}, False {Unsignaled}, nil);
InitializeCriticalSection(FObjectCS);


Есть несколько потоков, которые примерно так ждут этого события:


WaitForSingleObject(FObjectEvent, INFINITE);
EnterCriticalSection(FObjectCS);
// Какая то работа над объектом
LeaveCriticalSection(FObjectCS);


И есть сигнализирующий поток:
EnterCriticalSection(FObjectCS);
SetEvent(FObjectEvent);
ResetEvent(FObjectEvent);
LeaveCriticalSection(FObjectCS);

Вопрос: Гарантировано ли сигнализирующий поток прервет ожидание этого Event-а во всех ждущих потоках?
Если нет, то как исправить?


 
Сергей М. ©   (2009-04-16 08:57) [1]


> Гарантировано ли


Да, иначе в этом объекте синхронизации попросту нет смысла.


> SetEvent(FObjectEvent);
> ResetEvent(FObjectEvent);


Это можно заменить на PulseEvent


 
Дмитрий С ©   (2009-04-16 09:06) [2]


> Сергей М. ©   (16.04.09 08:57) [1]

Вопрос именно в том, чтобы прервать ожидание *всех* ждущий потоков. PulseEvent делает тоже самое, но меня смутил хелп по поводу него:

Sets the specified event object to the signaled state and then resets it to the nonsignaled state after releasing the appropriate number of waiting threads.
Note  This function is unreliable and should not be used. It exists mainly for backward compatibility. For more information, see Remarks.

Вот и спрашиваю вот.


 
Сергей М. ©   (2009-04-16 10:26) [3]

Ах ты вон о чем ..

Разумеется, если какой-то поток в период времени между SetEvent и ResetEvent не находился в состоянии ожидания, то это поток, разумеется, не получит извещения о просигналившем событии.



Страницы: 1 вся ветка

Текущий архив: 2010.09.05;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.011 c
15-1276163521
bss
2010-06-10 13:52
2010.09.05
Работа TDateTime в отрицательном диапазоне


3-1244113042
ganda
2009-06-04 14:57
2010.09.05
Работа функцией UDF при вставки записи в Таблицу


2-1276080161
Анна
2010-06-09 14:42
2010.09.05
DataSet и передача параметров (MySQL5.1)


4-1239857013
Дмитрий С
2009-04-16 08:43
2010.09.05
SetEvent для сигнализации нескольким потокам.


8-1184912317
__Unknown__
2007-07-20 10:18
2010.09.05
Как без заиканий проиграть звук с микрофона!