我在一个类中定义了一个函数,它接受了一系列构造函数,并试图将函数(fillgamma
)传递给std::thread
。构造函数本身非常大,所以每次我想使用它时,我都无法将它们作为参数传递给函数。我尝试编译时遇到C3867错误,我很确定是由于行标记为坏行。
我的项目已经变得非常大,所以我已经放弃了一些外围设备的东西,但这里是类定义:
class gamma_threads
{
public:
void fillgamma(int t, float &total);
gamma_threads(std::vector<float> delpro, float Stau,float gamma0, int N);
~gamma_threads();
private:
std::vector<float> delpro;
const float Stau, gamma0;
float gint=0;
const int N;
};
这是试图实现线程的代码体:
gamma_threads T(delpro, Stau, gammafbb[0], N); // vector, float, float, int
while (flag==1)
{
std::thread th[8];
for (int i = 0; i < 8; i++)
{
if (!tlist.empty()) //tlist is a queue where I store the values to be fed to the threads
{
int temp_t = tlist.front();
th[i] = std::thread((T.fillgamma, temp_t, gammafbb[temp_t])); // bad line
if (temp_t + 8 <= tmax){ tlist.push(temp_t + 8); }
else { flag == 0; }
}
}
for (int i = 0; i < 8; i++)
{
th[i].join();
}
}
抱歉,如果代码本身效率低下/丑陋,这是我第一次使用C ++,所以任何其他建设性的批评都会受到欢迎