我想运行一个简单的线程:
main(){
std::thread thread_pulse([=]{
*this->do_adress = true;
std::this_thread::sleep_for(std::chrono::milliseconds(milliseconds));
*this->do_adress = false;
//delete this thread to avoid memory leaks
});
//do some other stuff without waiting for the thread to terminate
}
我如何确保线程执行完成后线程被删除并且没有内存泄漏而不等待线程在main上完成执行?
编辑:
感谢您的帮助,这是我想要的帮助
main(){
std::thread ([=]{
*this->do_adress = true;
std::this_thread::sleep_for(std::chrono::milliseconds(milliseconds));
*this->do_adress = false;
//delete this thread to avoid memory leaks
}).detach;
//do some other stuff without waiting for the thread to terminate
}
答案 0 :(得分:4)
如果您想在退出main
之前确保线程已完成,那么在您从main
返回之前使用
thread_pulse.join();
等待thread_pulse
完成后再继续。
如果您不在乎线程是否完成,那么您可以detach
喜欢
thread_pulse.detach();
创建后。这将使程序结束而不会抛出异常。
或者你可以构建一个存储线程的包装类,当它被销毁时,它会为你调用join
或detach
,所以你不必记住。您可以使用Scott Myers ThreadRAII
class ThreadRAII { public: ThreadRAII(std::thread&& thread): t(std::move(thread)) {} ~ThreadRAII() { if (t.joinable()) t.join(); } private: std::thread t; };
并修改为允许您选择是join()
还是detach()
,还是仅对行为进行硬编码。