полуOFF про RegisterWaitForSingleObject
От: Аноним  
Дата: 20.09.06 09:41
Оценка:
Запостил это сообщение в раздел Win32 но, ввиду невысокой активности этого раздела, продублировал тут.

Речь идет о Win32 API'шной функции
BOOL RegisterWaitForSingleObject(
PHANDLE phNewWaitObject, // адрес хендла объекта ожидания
HANDLE hObject, // хендл объекта
WAITORTIMERCALLBACK Callback, // функция обратного вызова
PVOID Context // произвольный параметр
ULONG dwMilliseconds, // таймаут
ULONG dwFlags // флаги
);

Если передать этой функции флаг WT_EXECUTEINWAITTHREAD, то, судя по описанию, функция обратного вызова будет вызвана в самом ожидающем потоке (т.е том потоке, который сделал вызов RegisterWaitForSingleObject).

Получается что вызывающий поток ОБЯЗАТЕЛЬНО ДОЛЖЕН иметь очередь сообщений?
Вызов будет синхронизован циклом выборки сообщений и, соответственно, в функции обратного вызова не нужно парить голову с защитой переменных от конкурентного доступа к переменнм.

Во всяком случае я не понимаю как для потока без очереди сообщений, сделавшего вызов RegisterWaitForSingleObject, может быть сделан callback-вызов исполняющийся в этом же потоке.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.