Re[2]: RegisterWaitForSingleObject and UnregisterWaitEx
От: WinUser  
Дата: 28.05.09 19:45
Оценка:
WU>>в 1 (вручную) случае "цикл"
WU>>в 2 (авто) случае после первого сброса выполнение кэллбэка только один раз

M>Здесь должно быть наоботот, правда?! Перепутали?


WU>>Как-то флаги на это влияют?(Register...)


M>Да, для manual reset event не следует вызывать PulseEvent, если не указаны флаги WT_EXECUTEINWAITTHREAD или WT_EXECUTEONLYONCE, так как в этом случае ожидающий поток не сможет обработать событие перехода объекта в сигнальное состояние.


WU>>Почему?(не понимаю почему во втором случае сразу возвращает управление Unreg...)


M>Что значит сразу "возвращает управление"? Почему передаете не валидный хэндл? Второй параметер — это хендл объекта, устанавливаемого в сигнальное состояние после удаления. — UnregisterWaitEx(hReg[0],/*здесь*/(HANDLE)(-1));


WU>>п.с. ругается на приведение PVOID<->DWORD У меня из размеры равны оба 4 байтам.В чем проблема?

WU>>warning C4311: 'type cast' : pointer truncation from 'PVOID' to 'DWORD'
WU>>warning C4312: 'type cast' : conversion from 'DWORD' to 'PVOID' of greater size

M>Компилятор не ругается, а предупреждает Вас, что бы обратили внимание на эти строки, еще раз проверили, и если все нормально, сделали приведение типов явно, тем самым указывая ему, что Вы точно уверены в том что делаете.


bAutoReset = TRUE Возращается управление после выполнения RegCallBack Это не понятно Почему он дальше не ждет следующего срабатывания от hEventAr[0];

bAutoReset = FALSE Не возращает управление (что вполне логично) Постоянно выполняется RegCallBack

http://msdn.microsoft.com/en-us/library/ms686876(VS.85).aspx
If this parameter is INVALID_HANDLE_VALUE, the function waits for all callback functions to complete before returning.
Я передаю -1 или INVALID_HANDLE_VALUE Специально для того,чтобы дождаться выполнения всех функций.

п.спод циклом я НЕ имел в виду for(DWORD i=0;i<SOME_NUM;++i) Выставил SOME_NUM=1; чтобы не путаться.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.