【发布时间】:2015-10-22 21:34:04
【问题描述】:
我在一段时间内有一个线程,但该程序仅在某些情况下有效。 我正在使用 c++、Boost 1.59 和 Visual Studio 2012 进行编程。 代码如下:
while(condition){
boost::thread t(GeneticAlgorithm);
if(!t.timed_join(boost::posix_time::seconds(10))){
//always entry here, because geneticAlgoritm is infinity
TerminateThread(t.native_handle(), 0);
more calculus..
}
}
我希望在 10 秒后停止线程并在返回“while”时创建另一个线程。我第一次运行线程工作,此后有时工作有时不工作。有什么想法吗?
【问题讨论】:
-
TerminateThread几乎从来都不是正确的方法。理想情况下,你应该有办法打断GeneticAlgorithm。 -
我见过的所有消息来源都说“不要依赖终止线程;它总是会导致程序状态不确定”
-
^^ 将任务排队到线程池,很好,应用程序生命周期线程正常,持续创建/加入/终止超级吸。
-
如果你真的需要停止并重新启动,在线程实例中设置一些 'stopWhenYouCanAndDeleteYourself' 布尔值,将线程的优先级设置为尽可能低的并孤立线程实例。
-
我们可以看看遗传算法中你有中断点的部分吗?
标签: c++ multithreading boost