为什么线程有不稳定的行为?

时间:2015-10-22 21:34:05

标签: c++ multithreading boost

我有一段时间内有一个线程,但该程序仅在某些情况下有效。 我用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;时创建另一个线程。我第一次运行线程工作,此后有时有时不工作。有什么想法吗?

1 个答案:

答案 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
}