而在C++11标准中,新增了对线程的支持。通过使用std::thread类,可以轻松地创建和管理线程。在本文中,我们将介绍如何使用C++11标准中的std::thread类来编写多线程程序。
首先,我们需要包含头文件
```cpp
#include
#include
void threadFunc() {
std::cout << "Hello from thread!\n";
}
int main() {
std::thread t(threadFunc);
t.join();
return 0;
}
```
在上面的示例中,我们定义了一个名为threadFunc的函数,然后在主函数中创建了一个新的线程t,并将threadFunc作为参数传入。最后通过调用t.join()来等待新线程执行完毕。
除了使用可调用对象来创建新线程外,我们还可以使用Lambda表达式来创建线程。Lambda表达式可以简洁地定义匿名函数,同时也可以方便地捕获外部变量。例如:
```cpp
#include
#include
int main() {
int x = 42;
std::thread t([&x](){
std::cout << "Hello from thread with x = " << x << "\n";
});
t.join();
return 0;
}
```
在上面的示例中,我们定义了一个Lambda表达式作为新线程的可调用对象,并捕获了外部变量x。这样就可以在新线程中使用外部变量x。
除了创建线程外,C++11标准还提供了一些线程库中常用的函数来操作线程。比如,我们可以通过std::this_thread::get_id()来获取当前线程的ID,通过std::this_thread::sleep_for()来让当前线程休眠一段时间。例如:
```cpp
#include
#include
#include
void threadFunc() {
std::cout << "Hello from thread with id = " << std::this_thread::get_id() << "\n";
}
int main() {
std::thread t(threadFunc);
t.join();
std::this_thread::sleep_for(std::chrono::seconds(1));
return 0;
}
```
在上面的示例中,我们在主函数中通过std::this_thread::get_id()来获取当前线程的ID,并在新线程中也获取了新线程的ID。
总的来说,C++11标准中引入的线程库为多线程编程提供了更加便利和高效的方法。通过std::thread类和其他相关类和函数,我们可以轻松地创建和管理线程,实现并发编程。同时,C++11标准中的线程库也提供了更多的线程操作函数,让多线程编程变得更加灵活和方便。希望本文对你有所帮助,谢谢阅读!