繁体   English   中英

无法使用线程构造函数

[英]Cannot use thread constructor

我一直在尝试学习如何多线程,但是我无法正确创建线程对象。 我有一个带有名为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';
}

错误: Error: no instance of constructor"std::thread::thread" matches the argument list argument types are: (<error-type>, int)

更新:所以我放入thread t1(&Task::task, &t, 1); 并摆脱了t1.join ,但是现在我遇到了一个新问题。 该程序将编译并运行,但是在运行时,它将在控制台中显示“ In Thread 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的构造和这里的析构函数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM