Я использую RegisterWaitForSingleObject
для ожидания событий последовательной связи, зарегистрированных с WaitCommEvent
.
Код работает хорошо в Windows XP, однако всегда запускает исключение где-то в тредпуле при работе в Windows 7.
Трассировка стека показывает
ntdll.dll!_TppWaiterpThread@4() + 0x3a7ee bytes
kernel32.dll!@BaseThreadInitThunk@12() + 0x12 bytes
ntdll.dll!___RtlUserThreadStart@8() + 0x27 bytes
ntdll.dll!__RtlUserThreadStart@8() + 0x1b bytes
Есть ли способ заставить эту функцию работать правильно в Windows 7, или мне нужно будет переписать с поддержкой нового Функции пула потоков в Windows Vista / 7 .
Вот пример того, как я вызываю код.Как заявлено, это работает безупречно на XP
// Calback is on an object defined as a static function
class CommPortCallback
{
public:
static void WINAPI serialLayerCallback( PVOID lpParameter,
BOOLEAN TimerOrWaitFired )
{
....
}
};
// wait is registered later as such
RegisterWaitForSingleObject(&pWaitData->callbackHandle, m_readOverlapped,
CommPortCallback::serialLayerCallback, pBaseCallback,
INFINITE, WT_EXECUTEONLYONCE)