所以線程終止,該代碼都在某種程度上是這樣的:C++與等待窗口
MAIN(){
/*waiting window class declaration*/
threadinfo* oThread=new threadinfo(); //An object that will help me know when to finish the thread
QueueUserWorkItem((LPTHREAD_START_ROUTINE)waitingWindow, (void*)mThread, WT_EXECUTELONGFUNCTION);
function_that_takes_time();
oThread->setTerminated(); //set member terminated to bool true
/*continue with other things*/
}
和waitingWindow功能,將在該線程
MSG msg;
hwndWaiting=CreateWindow(...) // here the window is created
while (msg.message != WM_QUIT)
{
if (PeekMessage(&msg, null, 0U, 0U, PM_REMOVE))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
else
{
if(oThread->isTerminated()) // isTerminated returns bool true if terminated
{
delete oThread;
ExitThread(0);
}
}
}
ExitThread(0);
潤了ExitThread刪除等待一個好辦法窗口,並安全地刪除線程? (至少我是100%肯定這種方式何時結束)。
我問這是因爲這部作品在Windows XP中很好,但將與「應用程序已停止工作」在Windows 7
感謝您的幫助崩潰。
ExitThread是錯誤的。你知道嗎,在你的代碼中,它退出了我認爲不是你的意圖的調用線程。但是根本不要打電話。請求你的線程終止並等待,直到它結束。 –
當你說「讓你的線程終止」時,我認爲你的意思是我仍然可以使用oThread並使用不同的函數來結束線程? (如_endThread())?或者返回一個值呢? – Filgera
不可以。您向線索發送一條消息,告訴它您希望它終止。然後,您可以等到可以在方便的時候這樣做。 –