std::thread 启动线程
时间: 2024-08-17 12:01:36 浏览: 33
`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是C++11标准库中提供的线程类,用于创建和管理多线程。它可以让我们在程序中同时执行多个任务,提高程序的并发性和效率。
使用std::thread创建线程的基本步骤如下:
1. 包含头文件:`#include <thread>`
2. 定义线程函数:创建一个函数,作为线程的入口点,该函数将在新线程中执行。
3. 创建线程对象:使用std::thread类创建一个线程对象,并将线程函数作为参数传递给它。
4. 启动线程:调用线程对象的`std::thread::join()`或`std::thread::detach()`方法来启动线程的执行。
下面是一个简单的示例代码,演示了std::thread的基本用法:
```cpp
#include <iostream>
#include <thread>
// 线程函数
void threadFunction() {
std::cout << "Hello from thread!" << std::endl;
}
int main() {
// 创建线程对象,并传入线程函数
std::thread myThread(threadFunction);
// 等待线程执行完毕
myThread.join();
std::cout << "Hello from main thread!" << std::endl;
return 0;
}
```
在上面的示例中,我们定义了一个名为`threadFunction`的线程函数,它会输出一条消息。在`main`函数中,我们创建了一个名为`myThread`的线程对象,并将`threadFunction`作为参数传递给它。然后,我们调用`myThread.join()`等待线程执行完毕。最后,主线程输出一条消息。
std::thread什么时候启动
std::thread是C++标准库中用于创建和管理线程的类。当创建一个std::thread对象时,线程并不会立即启动。相反,它会等待我们调用std::thread对象的成员函数join()或detach()来启动线程。
具体来说:
1. 如果调用了std::thread对象的join()函数,那么该线程会阻塞等待,直到该线程执行完毕。在调用join()之后,我们可以认为该线程已经启动并运行,且在join()返回之前不会结束。
2. 如果调用了std::thread对象的detach()函数,那么该线程会与std::thread对象分离,成为一个独立的后台线程。在调用detach()之后,我们可以认为该线程已经启动并运行,且在后台运行直到线程结束。
需要注意的是,一旦调用了join()或detach()函数,std::thread对象就不能再次被join()或detach(),并且不能被复制或移动。此外,如果std::thread对象在析构时没有被join()或detach(),程序会终止(std::terminate)。
下面是一个简单的示例代码,展示了如何创建并启动一个线程:
```cpp
#include <iostream>
#include <thread>
void threadFunction() {
std::cout << "This is a thread." << std::endl;
}
int main() {
std::thread myThread(threadFunction); // 创建一个std::thread对象,传入线程函数
// 调用join()函数,启动线程并等待线程结束
myThread.join();
std::cout << "Main thread." << std::endl;
return 0;
}
```
在上面的示例代码中,我们定义了一个线程函数threadFunction,它会简单地输出一条消息。在main函数中,我们创建了一个std::thread对象myThread,并传入线程函数threadFunction。然后,我们调用myThread的join()函数,启动线程并等待线程结束。最后,输出一条消息表示主线程的执行。
需要注意的是,在调用join()之前启动线程会导致主线程等待直到子线程结束。如果我们在调用join()之前调用了detach(),则子线程将在后台运行而不会阻塞主线程。