old*_*994 4 c++ multithreading c++11
我是C++ 11线程的新手,我正在尝试做如下的事情:
class Something {
public:
void start() {
this->task_ = std::thread(&Something::someTask, this);
this->isRunning_ = true;
this->task_.detach(); // I read detach will stop it from hanging
}
void stop() {
this->isRunning = false;
}
~Something() {
this->stop();
}
private:
std::atomic<bool> isRunning_;
std::thread task_;
void someTask()
{
while(this->isRunning_) {
// do something forever
}
}
};
Something whatever;
whatever.start();
Run Code Online (Sandbox Code Playgroud)
但是,线程不断被阻止.whatever.start()执行后没什么.它只是在循环运行时挂起.
通常的模式是
class Something {
public:
void start() {
this->task_ = std::thread(&Something::someTask, this);
// this->task_.detach(); <<<<<< Don't do that.
}
void stop() {
this->isRunning_ = false;
task_.join(); // <<< Instead of detaching the thread, join() it.
}
~Something() {
this->stop();
}
private:
std::atomic<bool> isRunning_;
std::thread task_;
void someTask()
{
this->isRunning_ = true;
while(this->isRunning_) {
// do something forever
}
}
};
Run Code Online (Sandbox Code Playgroud)
拆除std::thread通常不是一个好主意,除非有某种同步设置,允许等待线程执行在整个过程结束之前结束.
通常fork()通过创建后台子进程来实现对进程的演示,并让父进程将控制权返回给调用者.
| 归档时间: |
|
| 查看次数: |
1571 次 |
| 最近记录: |