Как я могу приостановить / прервать boost :: thread в другом потоке?

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

Решение

Ты можешь использовать boost::thread::interrupt, Ваша целевая нить должна вызвать один из функции точки прерывания периодически, когда он готов к прерыванию. Если другой поток вызывает boost::thread::interruptэта функция скинет boost::thread_interrupted исключение. Если ваш поток находится в состоянии, это не может быть прервано, но вам нужно вызвать одну из функций, которые могут быть прерваны boost::thread::interruptПросто временно отключите прерывание disable_interruption учебный класс.

В вашем случае просто замените Sleep звонки с boost::this_thread::sleep звонки.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]