gpt4 book ai didi

c++ - 线程调用类函数错误

转载 作者:行者123 更新时间:2023-11-28 05:56:17 24 4
gpt4 key购买 nike

所以我对这里的线程有点陌生,我有一个带有函数的类,我不想同时运行 4 次。它需要两个参数,但是对于 4 次中的每一次,发送的参数都与另一个不同。这是主要的:

int main()
{

MicroProcessor Cpu;
Cpu.Run_core1();

thread t1(Cpu.Run_core2);
thread t2(Cpu.Run_core3);
thread t3(Cpu.Run_core4);



t1.join();
t2.join();
t3.join();

cout << "Simulation done.\n";
return 0;
}

我基本上想要做的是使用主线程来处理 4 个任务中的一个,然后使用三个线程来处理其余三个任务。但是,声明这些线程会打印出此错误:

IntelliSense: function "std::thread::thread(const std::thread &)" (declared at line 70 of "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include\thread") cannot be referenced -- it is a deleted function

以下是 MicroProcessor 类,以备不时之需:

class MicroProcessor
{
public:
MicroProcessor();

void Run_core1();
void Run_core2();
void Run_core3();
void Run_core4();

void Run(std::ifstream&, I_mem&);
~MicroProcessor();

private:
std::ifstream in1, in2, in3, in4;
I_mem insts1, insts2, insts3, insts4;
D_mem data;

};
#endif

Run_core() 函数做的唯一一件事就是用各自的参数调用 Run 函数。

PS:I_mem 是另一个用户定义的类。

抱歉发了这么长的帖子!谢谢:)

最佳答案

你正试图将指向方法的指针传递给线程对象(实际上你有语法错误,但我明白你的意图)。它就是行不通——它需要一个关联的对象。您可以使用 std::bind 创建一个可调用对象,然后将其传递给 std::thread 对象,如下所示:

thread t1(std::bind(&Cpu::Run_core2, &Cpu));

或者,您也可以使用 lambda 函数:

thread t1([&Cpu]{Cpu.Run_core2();}));

或者,最好的方法是使用另一个 std::thread 构造函数:

thread t1(&Cpu::Run_core2, &Cpu);

对其余部分进行相同的操作,应该会起作用。

关于c++ - 线程调用类函数错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34107681/

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