嗨,我正在尝试找到最佳的和平方式来终止工作线程。我有以下代码:
class test{
public:
test() {}
~test() {}
std::atomic<bool> worker_done;
int a;
void pr() {
while (true) {
if (worker_done) {
break;
}
std::this_thread::sleep_for(std::chrono::milliseconds(500));
printf("%d \n", a++);
}
}
std::thread* m_acqThread;
void continuous() {
m_acqThread = new std::thread(&test::pr, this);
}
void stopThread(){
if (m_acqThread) {
if (m_acqThread->joinable())
m_acqThread->join();
delete m_acqThread;
m_acqThread = nullptr;
}
}
};
int main(){
test t;
t.continuous();
std::this_thread::sleep_for(std::chrono::milliseconds(2000));
t.worker_done = true;
t.stopThread();
std::string str;
std::cin.clear();
getline(std::cin, str);
return 0;
除了将"worker_done"设置为true之外,还有更好的通知工作线程终止的方法吗?
谢谢
unique_ptr
代替手动指针跟踪。 - GManNickGstd::thread
没有这样的接口。要么使用粗暴的方法,要么使用标志。 - Baum mit Augen