Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 无法使用线程构造函数_C++_Multithreading - Fatal编程技术网

C++ 无法使用线程构造函数

C++ 无法使用线程构造函数,c++,multithreading,C++,Multithreading,我一直在尝试学习如何创建多线程,但我无法正确创建线程对象。我有一个对象,它有一个名为task的函数,但当我添加函数和参数时,它表示构造函数不接受它。顺便说一句,我使用VisualStudio作为我的IDE 这是我的主要文件: #include <iostream> #include <thread> #include "Task.h" using namespace std; int main(int argc, char** argv) { Task t;

我一直在尝试学习如何创建多线程,但我无法正确创建线程对象。我有一个对象,它有一个名为task的函数,但当我添加函数和参数时,它表示构造函数不接受它。顺便说一句,我使用VisualStudio作为我的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;
}

问题是
Task::Task
是一个成员函数。成员函数有一个隐藏参数,用作此指针。要实现这一点,您应该传递一个类的实例作为
this
指针。所以像这样初始化你的线程

thread t1(&Task::task, &t, 1)
示例中的另一个问题是没有调用
join
t.join
实际上并不调用
join
,您必须这样调用它:
t.join()
。如果执行了
std::thread
的析构函数,并且没有调用
join
,析构函数将调用
std::terminate


有关
std::thread
的构造函数及其析构函数的详细信息,请参阅。

您遇到的问题是
Task::Task
是一个成员函数。成员函数有一个隐藏参数,用作此指针。要实现这一点,您应该传递一个类的实例作为
this
指针。所以像这样初始化你的线程

thread t1(&Task::task, &t, 1)
示例中的另一个问题是没有调用
join
t.join
实际上并不调用
join
,您必须这样调用它:
t.join()
。如果执行了
std::thread
的析构函数,并且没有调用
join
,析构函数将调用
std::terminate


有关
std::thread
的构造函数及其析构函数的详细信息,请参阅。

Visual Studio什么?有很多版本。
t1.join
无法编译,您应该始终尝试发布真实代码,而不是当场键入。我正在使用visual studio professional 2015我已编辑以修复您的其他问题。您需要调用
join
,否则当析构函数执行时,tread将调用
std::terminate
。Visual Studio什么?有很多版本。
t1.join
无法编译,您应该始终尝试发布真实代码,而不是当场键入。我正在使用visual studio professional 2015我已编辑以修复您的其他问题。您需要调用
join
,否则当析构函数执行时,tread将调用
std::terminate
。我这样做了,但现在出现了一个新错误。看看我问题的更新。我做了,但现在我有一个新的错误。看看我问题的更新。
thread t1(&Task::task, &t, 1)