我正在嘗試在第三方應用程式視窗中偵聽事件,在該視窗中我不擁有源。
我不明白這部分
uj5u.com熱心網友回復:
在您的情況下,在呼叫 SetWinEventHook 之后,訊息回圈需要在 main 中。并且由于您沒有其他方式讓您的程式退出,您可能希望創建一個帶有退出按鈕的對話框,并且在該按鈕的處理程式中 BN_CLICKED 使用對 MessageBox 的呼叫來確認用戶想要退出如果是,則執行 PostQuitMessage)。確認是因為否則太容易退出。
uj5u.com熱心網友回復:
您顯示的訊息回圈非常好(將其移入 后EventHook())。
“崩潰”并不是真正的崩潰。它只是程式突然終止自己,因為當std::thread物件被銷毀時執行緒仍在運行,因為您在退出時超出范圍之前沒有呼叫join()或呼叫detach()它_tmain()。
每std::thread::~thread:
銷毀執行緒物件。
如果
*this有關聯的執行緒 (joinable() == true),std::terminate()則呼叫。筆記
執行緒物件在之后沒有關聯的執行緒(并且可以安全地銷毀)
- 它是默認構造的
- 它是從
join()被稱為detach()被稱為
所以,t1.join()在_tmain()退出前簡單呼叫:
int _tmain(int argc, _TCHAR* argv[])
{
std::thread t1(EventHook);
...
t1.join();
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/314747.html
上一篇:對話框視窗程序作為類的成員函式
