将类的成员函数传递给 std::thread

Passing class's member function to std::thread

本文关键字:std thread 成员 函数      更新时间:2023-10-16

在我的代码中使用std::thread有一个问题:

Class Timer
{
...
public:
    void Start(bool Asynch = true)
    {
        if (IsAlive())
        {
            return;
        }
        alive = true;
        repeat_count = call_number;
        if (Asynch)
        {
            t_thread = std::thread(&ThreadFunc, this);
        }
        else
        {
            this->ThreadFunc();
        }
    }
    void Stop()
    {
        alive = false;
        t_thread.join();
    }
...
}

我得到以下错误:

错误C2276: '&':绑定成员函数表达式的非法操作

t_thread是类的私有std::thread实例,ThreadFunc()是返回void的类的私有成员函数;

我想我明白有2种方式发送成员函数std::线程,如果函数是静态的,我会使用t_thread = std::thread(threadfunc);但是我不希望ThreadFunc是静态的,这样做会给我错误。

我想我通过创建另一个函数解决了这个问题:

std::thread ThreadReturner()
{
    return std::thread([=] { ThreadFunc(); });
}
...
t_thread = ThreadReturner();

这样我不会得到错误,但我不明白为什么第一个不工作。

任何帮助都是感激的。

我的问题看起来像一个重复,但只有一个不同,在另一个问题的答案中,std::thread在类声明或实现之外使用,它在main()中,在这种情况下指定作用域对我有意义,但当std::thread在类内部调用时就没有意义了。这是我看到的唯一的区别,为什么我做这个线程,抱歉可能重复。

你应该指定作用域

&Timer::ThreadFunc