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; чтобы не путаться.