Я хочу, чтобы определенный поток перестал работать. Функция потока выглядит следующим образом:
unsigned __stdcall keyloggingmanager::RunKeyLogger(void * args) {
UNREFERENCED_PARAMETER(args);
wcout << "RunKeyLogger Thread Started !" << endl;
HINSTANCE appInstance = NULL;
HHOOK _keyboardHook = NULL;
appInstance = GetModuleHandle(NULL); // getting the current module handle
_keyboardHook = SetWindowsHookEx(WH_KEYBOARD_LL, ThisObj->KeyPressHandler, appInstance, GLOBAL_HOOK); // setting the hook.
LPMSG msg = { 0 };
while (GetMessage(msg, NULL, 0, 0) != 0)
{
TranslateMessage(msg);
DispatchMessage(msg);
}
cout << "Got WM_QUIT, aborting...\n";
UnhookWindowsHookEx(_keyboardHook);
if (_keyboardHook == NULL) {
wcout << L"UNABLE TO HOOK" << endl;
}
else if(appInstance == NULL)
{
wcout << L"UNABLE TO GET MODULE HANDLE" << endl;
}
return 0;
}
строка, используемая для остановки потока, выглядит следующим образом:
PostThreadMessage(AboveThreadId, (UINT)WM_QUIT, NULL, NULL);
Я получаю исключение нарушения прав доступа с помощью этого метода.
Я пробовал несколько вариантов, как:
while ( GetMessage(msg, hWnd, 0, 0) )
{
if ( msg->message == WM_QUIT )
{
break;
}
else
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
Кто-нибудь сталкивался с этой проблемой раньше?