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