2011-08-02 67 views
1

我有這樣一個主題:正確終止正在運行的線程,其「作品」

DWORD WINAPI message_loop_thread(LPVOID dummy) { 
     MSG message; 
     while (GetMessage(&message, NULL, 0, 0)) { 
       TranslateMessage(&message); 
       DispatchMessage(&message); 
     } 
} 

和我一起CreateThread啓動:

DWORD thread_id; 
CreateThread(0, 0, message_loop_thread, 0, 0, &thread_id); 

這似乎是工作,但我怎麼能正確關閉這個線程?通常線程正在等待GetMessage,所以我認爲線程被阻塞。

有沒有很好的方法來做到這一點?我試過TerminateThread,但是這個掛起,我認爲這不是一個很好的解決方案。

有人想法嗎?

問候 BENJ邁耶

+0

不要使用CreateThread(),除非你知道它做了什麼*不做*。 'CreateThread()'不會正確初始化運行時,也不會在線程死亡時設置CRT終結鉤子來執行。看到這裏的討論:http://stackoverflow.com/questions/331536/windows-threading-beginthread-vs-beginthreadex-vs-createthread-c –

回答

3

正確的方法是張貼WM_QUITthread_id。您爲此使用PostThreadMessage()。作爲響應,GetMessage返回0,while循環退出,並且函數退出(錯誤地,您缺少return語句)。當線程的頂層函數退出時,線程結束。

+0

這工作。謝謝。 –