不能使用线程构造函数

我一直在试图学习如何多线程,但我无法正确创建线程对象。我有一个名为task的函数,但是当我添加函数和参数时,它说构造函数不会接受它。顺便说一句,即时通讯使用Visual Studio作为我的IDE。不能使用线程构造函数

这里是我的主文件:

#include <iostream> 

#include <thread>

#include "Task.h"

using namespace std;

int main(int argc, char** argv)

{

Task t;

thread t1(t.task, 1);

t1.join;

return 0;

}

类任务的对象:

#include "Task.h" 

#include <iostream>

using namespace std;

Task::Task()

{

}

Task::~Task()

{

}

void Task::task(int x) {

cout << "In Thread " << x << '\n';

}

错误:​​

更新: 所以我把在thread t1(&Task::task, &t, 1);和整肃t1.join,但现在我有一个新问题。程序编译器和运行,但它运行时的权利,则显示“在线程1”在控制台上,而另一个窗口弹出,上面写着:

Debug Error! 

abort() has been called

(Press retry to debug the application)

回答:

你的问题是,Task::task是一个成员函数。成员函数有一个用作this指针的隐藏参数。为了完成这项工作,你应该传递一个类的实例,作为this指针。所以初始化你的线程这样

thread t1(&Task::task, &t, 1) 

你在你的例子有另外一个问题是,join不会被调用。 t.join实际上并没有拨打join,你必须这样称呼它:t.join()。如果std::thread的析构函数执行且join未被调用,则析构函数将调用std::terminate

有关std::thread的构造函数和here的更多信息,请参阅here的析构函数。

以上是 不能使用线程构造函数 的全部内容, 来源链接: utcz.com/qa/267065.html

回到顶部