如何杀死或终止一个提升线程

时间:2014-05-09 07:26:00

标签: c++ visual-studio qt boost boost-thread

我想终止或杀死提升线程。 代码在这里:

DWORD WINAPI  StartFaceDetector(LPVOID temp)
{   
    int j=0;
    char **argv1;
    QApplication a(j,argv1);//add some thread here  
    gui::VisualControl w;
    t=&w;
    boost::thread u(&faceThread);       
    w.show();
    a.exec();
    // I Want to close u thread here.   
    return 0;   
}

我想在返回函数之前关闭该boost线程。 在此先感谢。

2 个答案:

答案 0 :(得分:13)

在Windows上:

TerminateThread(u.native_handle(), 0);

在Linux / QNX / UNIX /任何支持pthread的平台上:

pthread_cancel(u.native_handle());

pthread_kill(u.native_handle(), 9);

请注意,提升作者故意将其排除在外,因为行为依赖于平台而且定义不明确。但是,您并不是唯一能够达到此功能的人......

答案 1 :(得分:12)

使用interrupt()。此外,您应该定义interruption points。一旦到达其中一个中断点,线程将在调用interrupt()后中断。

u.interrupt();

More info

  

调用interrupt()只是在该线程的线程管理结构中设置一个标志并返回:它不会等待线程实际被中断。这很重要,因为线程只能在其中一个预定义的中断点中断,并且线程可能永远不会执行中断点,因此永远不会看到请求。目前,中断点是:

     
      
  • boost::thread::join()
  •   
  • boost::thread::timed_join()
  •   
  • boost::condition_variable::wait()
  •   
  • boost::condition_variable::timed_wait()
  •   
  • boost::condition_variable_any::wait()
  •   
  • boost::condition_variable_any::timed_wait()
  •   
  • boost::this_thread::sleep()
  •   
  • boost::this_thread::interruption_point()
  •