如何检查std::线程是否有效

How to check if std::thread is valid

本文关键字:线程 是否 有效 std 何检查 检查      更新时间:2023-10-16

我得到一个类对象,它只在某些情况下需要启动一个线程。在析构函数中,我可以方便地知道何时存在/是否存在线程。问题是,我如何检测std::thread对象现在是或曾经是一个有效线程。

class MyClass
{
public:
   ~MyClass()
    {
       // Attention pseudocode!!!!!
       if(mythread is a valid object)
           mythread.join();
       if(mythread was a valid object in its lifetime)
           Do some stuff
    }
    void DoSomeStuff()
    {
      // May or may not create a thread
    }
private:
   std::thread mythread;
};

我相信您正在寻找joinable函数:

~MyClass()
{
    if (t.joinable()) { t.join(); }
}