我想终止或杀死提升线程。 代码在这里:
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线程。 在此先感谢。
答案 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();
调用
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()