繁体   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