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()
Как мне этого добиться?
Ты можешь использовать boost::thread::interrupt
, Ваша целевая нить должна вызвать один из функции точки прерывания периодически, когда он готов к прерыванию. Если другой поток вызывает boost::thread::interrupt
эта функция скинет boost::thread_interrupted
исключение. Если ваш поток находится в состоянии, это не может быть прервано, но вам нужно вызвать одну из функций, которые могут быть прерваны boost::thread::interrupt
Просто временно отключите прерывание disable_interruption
учебный класс.
В вашем случае просто замените Sleep
звонки с boost::this_thread::sleep
звонки.
Других решений пока нет …