不能使用线程构造函数
我一直在试图学习如何多线程,但我无法正确创建线程对象。我有一个名为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