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