终止正在运行的线程c ++ std :: thread

时间:2016-08-18 14:34:54

标签: c++ multithreading

我想运行一个简单的线程:

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
}

1 个答案:

答案 0 :(得分:4)

如果您想在退出main之前确保线程已完成,那么在您从main返回之前使用

thread_pulse.join();

等待thread_pulse完成后再继续。

如果您不在乎线程是否完成,那么您可以detach喜欢

thread_pulse.detach();

创建后。这将使程序结束而不会抛出异常。

或者你可以构建一个存储线程的包装类,当它被销毁时,它会为你调用joindetach,所以你不必记住。您可以使用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(),还是仅对行为进行硬编码。