2010-05-14 26 views

回答

1

您可以使用事件作爲同步對象。檢查你的線程,不時有事件的狀態(具有零超時的WaitForSingleObject),如果有信號,返回線程的主函數。要從外部取消線索,只需設置事件。

+0

我有pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED,&OldType); 那裏我做了一些關鍵部分與其他線程後,我執行pthread_setcanceltype(OldType,NULL);我如何在Windows中做到這一點? – Suri 2010-05-14 15:09:03

2

Windows線程沒有取消點,所以沒有系統取消類型來考慮。因此,在Windows上「取消」一個線程意味着你,開發者需要提出一個策略來告訴線程退出。如果它是一個GUI線程,您可以發佈一個WM_QUIT消息。如果它是一個非GUI線程,那麼它確實取決於線程正在做什麼。你需要分析這個線程,看看你的代碼能否明確地檢查它是否需要繼續或退出。

如果你想避免這個問題並在Win32上獲得pthreads投訴行爲,可以使用pthreads-win32實現。

+0

Windows中的一些阻塞系統調用具有可警告狀態,包括WaitForSingleObject,WaitEx等,類似於各種pthread函數中的取消點。您可以使用類似QueueUserAPC http://msdn.microsoft.com/en-us/library/ms684954%28VS.85%29.aspx的東西來執行pthread_cancel的模擬,取消類型爲PTHREAD_CANCEL_DEFERRED。對於PTHREAD_CANCEL_ASYNCHRONOUS,您可以查看http://locklessinc.com/articles/pthreads_on_windows/上的pthread_cancel的Win32實現,但請閱讀關於此的免責聲明。 – 2011-07-05 23:36:16

+0

我的意思是WaitForSingleObjectEx – 2011-07-05 23:52:19

相關問題