[英]Couldn't terminate thread (error 6)
我們有一個龐大的,復雜的用C ++編寫的wxWidgets應用程序。 我添加了一個額外的后台線程。 當用戶單擊“開始”時,線程啟動。 當他們單擊“停止”時,線程停止。 由於超出我的理解范圍,單擊“停止” 還會導致顯示以下消息:
Can not wait for thread termination (error 6: the handle is invalid.)
Couldn't terminate thread (error 6: the handle is invalid.)
為什么發生這種情況? 更重要的是,我如何立即消除這種情況?
線程從這里開始:
_worker = new WorkerThread();
_worker->Create();
_worker->Run();
我知道線程正在運行,因為我可以看到它正在寫入的磁盤文件。
線程在這里停止:
if (_worker)
{
_worker->Delete();
_worker = NULL;
}
WorkerThread
類僅覆蓋Enter()
。 它絕對是可分離的線程。
該文檔充滿了關於可拆卸線程如何隨時刪除自身的可怕警告,所有內容必須始終包裹在關鍵部分。 但是我的工作線程會永遠運行,直到我告訴它停止為止。 我看不到為什么我需要為任何內容提供關鍵部分。
線程是否花了太長時間才能停止? 那是問題嗎? (它每秒只檢查一次TestDestroy()
。太慢了嗎?)
我真的不知道怎么解決這個問題。
您可以使用wxLogNull 來 “使它消失”,就像由wxWidgets生成的任何其他消息一樣。 但是,您不應該這樣做,因為您似乎在代碼中的某個地方有一個真正的錯誤,線程句柄顯然不應無效,如果確實如此,則某些東西顯然不會按照您的想法運行。 通過徹底清除錯誤,您幾乎可以保證所有錯誤都會在最壞的情況下以其他偽裝再次出現,並且通常會在無法調試它的客戶端計算機上顯示。 最好現在就做。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.