所以我在这里有一些新的线程,而且我有一个具有函数的类,我不能同时运行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&#34; std :: thread :: thread(const std :: thread&amp;)&#34; (在&#34的第70行声明; C:\ Program Files(x86)\ Microsoft Visual Studio 12.0 \ VC \ include \ thread&#34;)无法引用 - 它是一个 已删除的功能
以下是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是另一个用户定义的类。
对不起,很长的帖子! 谢谢:))
答案 0 :(得分:1)
您正在尝试将指向该方法的指针传递给线程对象(实际上您有语法错误,但我有您的意图)。它无法工作 - 它需要一个相关的对象。您可以使用std::bind
创建一个callable,然后将其传递给std::thread
对象,如下所示:
thread t1(std::bind(&Cpu::Run_core2, &Cpu));
或者,您也可以使用lambda函数:
thread t1([&Cpu]{Cpu.Run_core2();}));
或者,最好的方法是使用另一个std :: thread ctor:
thread t1(&Cpu::Run_core2, &Cpu);
对其他操作进行相同的操作,这应该有效。