如何检查boost线程正在运行并杀死它

时间:2013-03-27 02:10:25

标签: c++ boost window boost-thread

在我的程序中,它启动一个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
}

2 个答案:

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