c++11 thread类的简单使用
生活随笔
收集整理的这篇文章主要介绍了
c++11 thread类的简单使用
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
一个thread对象就代表一个线程执行,当对象创建完成后,线程函数就开始执行,下面这段话是c++11的thread类介绍。
An initialized thread object represents an active thread of execution; Such a thread object is joinable, and has a unique thread id.
A default-constructed (non-initialized) thread object is not joinable, and its thread id is common for all non-joinable threads.
A joinable thread becomes not joinable if moved from, or if either join or detach are called on them.
需要注意的是:当一个线程对象是joinable状态时,对象在析构前需要使用detach或者jion函数。
现在写代码证实这段话,加深c++11 thread类的使用,具体代码如下:
#include "stdafx.h" #include <memory> #include <string> #include <iostream> #include <thread>void pause_thread(int nSleepTime) {//std::cout << "pause for: " << nSleepTime << "\n";std::this_thread::sleep_for(std::chrono::seconds(nSleepTime)); }int main() {//thread1和thread2 是初始化的线程对象,它是joinable状态并且有唯一的id;std::thread thread1(pause_thread, 1);std::thread thread2(pause_thread, 2);//thread3是未初始化的线程对象,它是非joinable状态,id不唯一std::thread thread3;//验证代码if (thread1.joinable()){std::cout <<"thread1 is joinable" << std::endl;}if (thread2.joinable()){std::cout << "thread2 is joinable" << std::endl;}if (!thread3.joinable()){std::cout << "thread3 is not joinable" << std::endl;}std::cout << "***********分割线*****************\n\n" << std::endl;std::cout << "thread1: " << thread1.get_id() << std::endl;std::cout << "thread2: " << thread2.get_id() << std::endl;std::cout << "thread3: " << thread3.get_id() << std::endl;//thread objects that are joinable shall either be joined// or detached before they are destroyed.thread1.join();thread2.detach();std::cout << "*************分割线****************\n\n" << std::endl;//A joinable thread becomes not joinable if moved from, //or if either join or detach are called on them.if (!thread1.joinable()){std::cout << "thread1 becomes not joinable" << std::endl;}if (!thread2.joinable()){std::cout << "thread2 becomes not joinable" << std::endl;}return 0; }运行结果:
总结
以上是生活随笔为你收集整理的c++11 thread类的简单使用的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: 中国航天员遇到外星人怎么办?载人航天总师
- 下一篇: C++11多线程thread参数传递问题