怎么用std::thread()和std::thread{}去启动线程
时间: 2023-11-23 11:52:55 浏览: 33
使用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::this_thread和std::thread区别
std::this_thread和std::thread是C++中的两个线程相关的类。它们之间有以下区别:
1. std::this_thread是一个命名空间,提供了与当前线程相关的函数,如std::this_thread::yield和std::this_thread::sleep_for。这些函数允许当前线程放弃执行或休眠一段时间。
2. std::thread是一个类,用于创建和管理线程。通过std::thread,可以创建一个新的线程并指定要执行的函数或可调用对象。std::thread提供了一些成员函数,如join()和detach(),用于等待线程完成或分离线程。
下面是一个示例,演示了std::this_thread和std::thread的区别:
```cpp
#include <iostream>
#include <thread>
#include <chrono>
void threadFunction()
{
std::cout << "Thread is running" << std::endl;
std::this_thread::sleep_for(std::chrono::seconds(2));
std::cout << "Thread is done" << std::endl;
}
int main()
{
std::thread t(threadFunction);
std::cout << "Main thread is running" << std::endl; std::this_thread::yield();
std::cout << "Main thread is done" << std::endl;
t.join();
return 0;
}
```
在上面的示例中,我们创建了一个新的线程t,并在其中执行threadFunction函数。在主线程中,我们使用std::this_thread::yield()让出CPU时间片给其他线程,并使用std::this_thread::sleep_for()休眠2秒钟。最后,我们使用t.join()等待线程t完成。
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()`等待线程执行完毕。最后,主线程输出一条消息。