如何在另一个线程中暂停/中断boost :: thread?

时间:2012-10-27 20:46:18

标签: c++ multithreading boost interrupt

void workerFunc()  //first thread
{  
    for (int x=0;x<30;x++) //count up to 29
    {
        cout << x << endl;
        Sleep(1000); //one sec delay
    }
}    

void test()   //second thread
{
    for (int y=30;y<99;y++)  //count up to 98
    {
        cout <<'\t'<< y << endl;        
        Sleep (1000); //delay one sec
    }
}

int main(int argc, char* argv[])   
{  
    cout << "Main started " << endl; 
    boost::thread workerThread(workerFunc);    //start the 1st thread
    boost::thread t1(test); //start the second thread
    cin.get();     
    return 0;  
}

嗨,当test()的线程y = 35时,我想暂停/中断workerFunc()线程中test()的线程{{1}}

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:1)

您可以使用boost::thread::interrupt。当目标线程准备好被中断时,它必须定期调用其中一个interruption point functions。如果另一个线程调用boost::thread::interrupt,则此函数将抛出boost::thread_interrupted异常。如果您的线程处于状态,无法中断,但您需要调用可能被boost::thread::interrupt中断的其中一项功能,请暂时使用disable_interruption class禁用中断。

在您的情况下,只需使用boost::this_thread::sleep来电替换Sleep来电。