我有一段时间内有一个线程,但该程序仅在某些情况下有效。 我用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秒后停止线程并在返回"而#34;时创建另一个线程。我第一次运行线程工作,此后有时有时不工作。有什么想法吗?
答案 0 :(得分:-1)
没有interruptpoints没有中断。这里的中断不是软中断或硬件中断,而是合作中断。
您需要添加一个中断点,以便激活协作中断。
可以通过调用interrupt()成员来中断正在运行的线程 相应的boost :: thread对象的功能。当。。。的时候 中断的线程接下来执行指定的中断之一 点(或当它在执行一个时当前被阻止) 中断启用,然后boost :: thread_interrupted异常将 被抛断在被打断的线程中。如果没有被抓住,这将导致 中断线程的执行终止。和任何一样 其他异常,堆栈将被解除,而析构函数则为 将执行自动存储持续时间的对象。
您可以通过这种方式添加中断点。
bool GeneticAlgorithm() {
... some code
// this point must be passed at least once every 10 sec.
boost::this_thread::interruption_point();
... more code
}