簡體   English   中英

無法終止線程(錯誤6)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM