我试着记住线程是如何工作的,我看到C++11
它简化了线程的创建和使用。我使用这篇文章Simple example of threading in C++的答案来创建一个简单的线程。
但是我和帖子的答案之间存在差异,我不是主要的,所以我在构造函数中创建我的线程,并且它不是相同的参数。
这是我的简单代码以及我尝试做的事情:
我在班级mainWindow.cpp
:
//Constructor
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
// Constructs the new thread and runs it. Does not block execution.
thread t1(lancerServeur, NULL);
ui->setupUi(this);
}
void MainWindow::lancerServeur(){
std::cout << "Le serveur se lance";
}
错误是:
expected ';' before 't1'
statement cannot resolve address of overloaded function thread t1(lancerServeur, NULL);
我认为我thread t1(lancerServeur, NULL);
的参数是假的。
你能解释一下它是如何运作的吗?
感谢。
答案 0 :(得分:4)
您使用std::cout
,因此我假设在using namespace std;
之前某处不是thread
或类似物。试试std::thread
。
尝试lambda std::thread t1([this](){this->lancerServeur();});
在退出构造函数之前不要忘记th1.join()
,否则std::terminate
将在thread
析构函数中调用。
如果th1
中的线程将运行一段时间,那么使其成为类成员变量,然后初始化将类似于th1 = std::move(std::thread t1([this](){this->lancerServeur();}));
在类析构函数中,th1.join();