std::thread 启动线程
时间: 2024-09-27 08:01:24 浏览: 30
在 C++ 标准库 `<thread>` 中,`std::thread` 是一个类模板,用于创建并启动新的线程。它的基本用法如下:
```cpp
#include <thread>
// 定义一个要在新线程中运行的函数
void worker_function()
{
// 线程体在这里
}
int main()
{
// 创建一个新的线程,并传入 worker_function 函数作为参数
std::thread new_thread(worker_function);
// 如果你想等待新线程完成,可以调用 join() 函数
// 注意,这会阻塞主线程直到新线程结束
new_thread.join();
return 0;
}
```
在这个例子中,`worker_function` 就是新线程将要执行的代码。当你调用 `new_thread` 的构造函数并传递这个函数指针给它时,系统就会开始一个新的线程,并立即执行该函数。
另外,如果你不需要等待线程完成,还可以直接忽略 `join()`,这样新线程会在后台独立运行,不会阻塞主线程。
相关问题
std::thread 启动线程
`std::thread`是C++11引入的一个库,用于在新线程中启动函数执行。以下是使用`std::thread`的基本步骤来启动一个新的线程:
```cpp
#include <iostream>
#include <thread>
// 要在一个新的线程中执行的函数
void my_function() {
std::cout << "Hello from a new thread!" << std::endl;
}
int main() {
// 创建一个新线程,传入要执行的函数以及所需的参数(这里是空参数列表)
std::thread worker_thread(my_function);
// 线程开始运行(但并不阻塞主线程)
worker_thread.start();
// 主线程继续执行其他任务
std::cout << "Main thread is doing something else..." << std::endl;
// 等待新线程结束,但这不是必需的(可以不加这一行)
worker_thread.join(); // 如果希望等待线程结束
return 0;
}
```
在这个例子中,`my_function()`将在新线程中异步运行,而`main()`函数继续执行。如果你想让主线程等待新线程结束后再继续,可以调用`join()`方法。
怎么用std::thread()和std::thread{}去启动线程
使用std::thread()和std::thread{}都可以启动线程,它们的区别在于std::thread()会默认构造一个空线程对象,而std::thread{}会构造一个默认线程对象。在使用时,我们可以将需要执行的函数作为参数传递给std::thread()或std::thread{}构造函数,然后调用start()方法启动线程。例如:
```
#include <iostream>
#include <thread>
void myFunction() {
std::cout << "Hello from thread!" << std::endl;
}
int main() {
std::thread t1(myFunction); // 使用std::thread()启动线程
std::thread t2{myFunction}; // 使用std::thread{}启动线程
t1.join();
t2.join();
return 0;
}
```
在上面的例子中,我们定义了一个名为myFunction()的函数,并将其作为参数传递给std::thread()和std::thread{}构造函数。然后,我们调用join()方法等待线程执行完毕。
阅读全文