如何检查线程是否为NULL

时间:2017-03-20 23:54:08

标签: c++ multithreading c++11 winapi 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;
}

if(opThread != NULL)行明显不正确。

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

由于 -D

1 个答案:

答案 0 :(得分:5)

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

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