【发布时间】:2014-03-05 16:01:09
【问题描述】:
我们有一个用 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()。它绝对是一个可拆卸的线程。
文档中充满了关于可分离线程如何随时删除自身的可怕警告,并且所有内容都必须始终包含在关键部分中。但是 my 工作线程永远运行,直到我告诉它停止。我不明白为什么我需要一个关键部分。
线程是否需要太长时间才能停止? 那有问题吗? (它每秒只检查一次TestDestroy()。是不是太慢了?)
我真的不知道如何解决这个问题。
【问题讨论】:
标签: c++ windows multithreading wxwidgets