我們有一個用C++編寫的巨大而複雜的wxWidgets應用程序。我添加了一個額外的後臺線程。當用戶點擊「開始」時,線程開始。當他們點擊「停止」時,線程停止。對於我無法理解的原因,點擊「停止」 也會導致顯示以下信息:無法終止線程(錯誤6)
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()
一次,是不是太慢了?)
我真的搞不明白地獄怎麼解決這個問題。
我基本上同意這封郵件中的所有內容。 – MathematicalOrchid