gpt4 book ai didi

c++ - 无法使用 C++11 线程类在单独的线程中调用类成员函数

转载 作者:行者123 更新时间:2023-11-30 01:44:05 26 4
gpt4 key购买 nike

我很难获得在单独线程中调用类成员函数的正确语法。这三个选项都不起作用。第 1 行和第 2 行抛出编译时错误,而第三行显示运行时错误。谁能告诉我正确的方法是什么。

#include <iostream>
#include <thread>
#include <mutex>
using namespace std;
struct Complex
{
mutex mx;
int i;
Complex(int q) : i(q) {}
void mul(int x)
{
lock_guard<mutex> lock(mx);
int z = i*x;
cout<<z<<endl;
}
void div(int x)
{
lock_guard<mutex> lock(mx);
int z = i/x;
cout<<z<<endl;
}
void both(int x, int y)
{
mul(x);
div(y);
}
};
int main()
{
//Complex complex(9);
//thread t(&Complex::both,&Complex(9),32, 23); --1
//thread t(&Complex::both,complex,32,23); --2
//thread t(&Complex::both,&complex,32,23); --3
return 0;
}

最佳答案

(1) 不起作用,因为表达式 &Complex(9) 格式不正确 - 您正在尝试获取临时地址,这是不允许的。

(2) 不起作用,因为 std::thread 将在内部复制 它的所有参数。 complex 的复制构造函数被定义为已删除,因为它包含一个类型为 std::mutex 的成员,其 copy constructor被删除。

(3) 编译正常,但在运行时会失败,因为创建的线程 t 在加入之前将被销毁。您首先要加入:

std::thread t(&Complex::both, &complex, 32, 32);
t.join();

关于c++ - 无法使用 C++11 线程类在单独的线程中调用类成员函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36829247/

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