我使用TinyThread ++構建了自己的線程庫。它工作得很好,對我來說這也是一個很好的學習經驗。我有自己的數據結構來傳遞消息,界面對我來說很有意義,主要是因爲我是它的作者。與pthreads一起使用Win32 API功能
每當在我的系統中創建一個線程時,它會在一個循環中運行,並通過我自己設計的消息傳遞協議偶爾檢查消息。
現在我想開始使用一些Windows API功能,並且Windows有自己的一套約定和消息隊列等。現在我很確定TinyThread ++使用pthreads。由於我使用MinGW,我想知道是否在Windows線程上實現了pthread。如果是這種情況,我可能會將我的pthreads線程視爲windows線程。但如果不是,我懷疑我可能會遇到一些奇怪的行爲。
編輯:查看由Tinythread給出的thread
類型++,它看起來像它實際上使用了Windows HANDLE
跟蹤線程,甚至使用_beginthreadex
產卵他們。
我的問題是,如果我從我的pthreads代碼的某個地方撥打SetWindowsHookEx
,Windows會很高興嗎?我意識到我需要在同一個線程中有一個Windows消息輪詢循環。我打算做這樣的事情:
try {
HHOOK mousehook = SetWindowsHookEx(WH_MOUSE_LL, MouseHookProc,
NULL, 0);
if (mousehook == NULL) printf("Mousehook error %u\n",GetLastError());
while(true) {
MSG msg;
if (GetMessage(&msg,0,0,0)) {
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
UnhookWindowsHookEx(mousehook);
printf("Procedure completed without exceptional events.\n");
} catch (...) {
printf("Exception!\n");
}
你永遠不會退出'while'循環。 – GSerg
你是對的。我還沒有弄清楚我可以如何處理清理。 –
@GSerg,因爲'GetMessage'在接收到'WM_QUIT'時返回0,我應該跳出while循環,對吧? –