在我的程序中,它启动一个boost线程并将处理程序保持为主线程的成员。 当用户按下取消按钮时,我需要检查仍在运行的启动线程,如果它正在运行,则需要杀死该特定线程。这是伪代码。
作弊线程
int i =1;
boost::thread m_uploadThread = boost::thread(uploadFileThread,i);
这是用于检查线程是否仍在运行的方法,但是它无效
boost::posix_time::time_duration timeout = boost::posix_time::milliseconds(2);
if (this->uploadThread.timed_join(timeout)){
//Here it should kill the thread
}
答案 0 :(得分:4)
返回值true表示线程在调用超时之前完成。看起来像你想要的是
if(!this->uploadThread.timed_join(timeout))
答案 1 :(得分:2)
要停止你的线程,你可以使用:
my_thread.interrupt();
为了使其正常工作,您必须在中断时希望线程的功能停止时设置interruption point。
注意:它自动中断不会停止线程它只是设置一个标志,当达到中断点时线程被中断。如果没有找到中断点,则该线程不会停止。
您也可以根据线程是否被中断来处理中断的异常boost::thread_interrupted
。
例如,假设下一个代码在线程函数中:
try
{
//... some important code here
boost::this_thread.interruption_poit(); // Setting interrutption point.
}
catch(boost::thread_interrupted&)
{
// Now you do what ever you want to do when
// the thread is interrupted.
}