std::thread 启动线程
时间: 2024-08-17 12:01:36 浏览: 71
`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()方法等待线程执行完毕。
std::map<std::thread::id, std::shared_ptr<std::thread>>类型的对象是分离线程吗
不,std::map<std::thread::id, std::shared_ptr<std::thread>>类型的对象本身并不是分离线程。它只是一个用来存储线程标识符和线程对象的数据结构,通常用于管理线程的相关信息。分离线程是指线程在启动后会与主线程分离,继续独立运行而不受主线程控制。在std::thread中,可以使用detach()函数来将线程设置为分离线程,但是std::map<std::thread::id, std::shared_ptr<std::thread>>本身并不能决定线程的分离状态。
阅读全文