如何检查线程是否为NULL

Mic*_*ich 3 c++ winapi multithreading c++11 visual-studio-2015

我正在使用一些类的实例运行一个简单的操作,我想在每个类的单独线程中运行此操作.如果该类的同一实例想要再次运行该操作,则必须等待该实例中的先前操作完成.但是,类的另一个实例应该能够在第一个实例执行相同操作时启动它的操作.

我想做的是这样的:

#include <thread>
class MyClass
{
    void Operation(){Sleep(10000);}
    void LaunchOperation()
    {
        if(opThread != NULL) //Pseudo Code line
            opThread.join();
        opThread = std::thread(&MyClass::Operation, this);
    }

    std::thread opThread;
}
Run Code Online (Sandbox Code Playgroud)

但这if(opThread != NULL)条线显然不正确.

是否有正确的替代品,或者我采取了错误的方法?

感谢:D

Ker*_* SB 5

您可能正在寻找joinable成员函数:

void f(std::thread & t)
{
    if (t.joinable())
    {
        t.join();
    }
    t = std::thread(&X::foo, &obj, 1, 2, 3);
}
Run Code Online (Sandbox Code Playgroud)

  • @JonathanPotter:这真是一个*滑点.join*是*同步点,只有*是*没有"之前","之后","已经","仍然"的概念,直到你有一个同步点.真的,你可以说的是,在连接返回后,线程不再运行. (3认同)
  • 请注意,`joinable()`不会告诉您当前正在运行的线程,只是它已经在过去运行但尚未加入.检查线程当前是否正在运行*当前需要特定于平台的代码. (2认同)