gpt4 book ai didi

c++ - 使用派生类的成员函数启动线程

转载 作者:行者123 更新时间:2023-11-28 05:12:03 35 4
gpt4 key购买 nike

类似于这个问题:Start thread with member function还有这个:std::thread calling method of class

但是我有以下内容:

#include <thread>
#include <iostream>
class myAbstractClass {
public:
virtual void myFunction() = 0;//abstract class
}

class myFirstClass : public myAbstractClass {
public:
void myFunction() { std::cout << "First class here";}
}

class mySecondClass : public myAbstractClass {
public:
void myFunction() { std::cout << "Second class here";}
}

然后我必须从新线程中的不同位置调用 myFunction(),但以下代码无法编译(而且我想不出其他可以尝试的方法):

public void callMemberFunctionInThread(myAbstractClass& myInstance) {
std::thread myThread (&myAbstractClass::myFunction, myInstance);
//supposed to call myInstance.myFunction() on myThread
}

最佳答案

传递 std::ref(myInstance)。请注意,std::thread 构造函数将复制传递给它的参数(参见 here ),您不能复制 myAbstractClass

(然后,所有这些仍然有效,因为 std::thread 功能是根据 std::invoke 描述的,它解开 std: :reference_wrapperstd::ref 获取并调用指向其成员函数的指针。参见 here)。

关于c++ - 使用派生类的成员函数启动线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43307681/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com