Выяснил, где у меня подтормаживает.
Код:
if (PeekMessage(&msg, NULL, 0, 0, 0)) {
if (GetMessage(&msg, NULL, 0, 0)) { // Получить сообщение
TranslateMessage(&msg); // Если сообщение не QUIT,
DispatchMessage(&msg); // оттранслировать его окну
}
else SysExit(); // Иначе выйти закрыв все устройства
}
При отладке дебаггером, тормозят две строчки PeekMessage и GetMessage. Причем ТОЛЬКО если есть хук, даже пустой, установленный моей программой. Тормозят где-то по 2-3 секунды каждая, потом программа идет далее.
---------- Post added at 14:15 ---------- Previous post was at 14:09 ----------
Думаю, что дело в хуке.
В режиме, когда подвисают PeekMessage и т.д. (а это когда активно консольное окно эмулятора), функция хука, хотя и установлена, ПЕРЕСТАЕТ работать. Это определяется просто - печатаю в специальное окно сообщение 'Hool action', когда хук вызывается. Так вот в этом режиме оно перестает печататься. Это значит, что функция хука пропадает, и возможно на ней все и подвисает.
---------- Post added at 14:17 ---------- Previous post was at 14:15 ----------
Обработчик хука таков:
Код:
LRESULT CALLBACK KeyboardHook(int nCode, WPARAM wParam, LPARAM lParam)
{
printf("Hook action\n");
return CallNextHookEx(hhKeyboardHook, nCode, wParam, lParam);
}
Подвисает при активном консольном окне хоть с со строчкой printf, хоть без нее. И прекрасно работает при переключении на окно эмулятора.
Инициализация хука такая:
hhKeyboardHook = SetWindowsHookEx(WH_KEYBOARD_LL, KeyboardHook, hInst, 0); // Установить глобальный хук клавиатуры