Запостил это сообщение в раздел Win32 но, ввиду невысокой активности этого раздела, продублировал тут.
Речь идет о Win32 API'шной функции
BOOL RegisterWaitForSingleObject(
PHANDLE phNewWaitObject, // адрес хендла объекта ожидания
HANDLE hObject, // хендл объекта
WAITORTIMERCALLBACK Callback, // функция обратного вызова
PVOID Context // произвольный параметр
ULONG dwMilliseconds, // таймаут
ULONG dwFlags // флаги
);
Если передать этой функции флаг WT_EXECUTEINWAITTHREAD, то, судя по описанию, функция обратного вызова будет вызвана в самом ожидающем потоке (т.е том потоке, который сделал вызов RegisterWaitForSingleObject).
Получается что вызывающий поток ОБЯЗАТЕЛЬНО ДОЛЖЕН иметь очередь сообщений?
Вызов будет синхронизован циклом выборки сообщений и, соответственно, в функции обратного вызова не нужно парить голову с защитой переменных от конкурентного доступа к переменнм.
Во всяком случае я не понимаю как для потока без очереди сообщений, сделавшего вызов RegisterWaitForSingleObject, может быть сделан callback-вызов исполняющийся в этом же потоке.