码迷,mamicode.com
首页 > 编程语言 > 详细

C++11多线程教程(创建线程)

时间:2020-08-17 16:41:39      阅读:74      评论:0      收藏:0      [点我收藏+]

标签:执行   ret   names   ios   使用   方法   控制   控制台   main   

创建线程与join()

#include<iostream>
#include<thread>
using namespace std;
void proc()
{
      cout << "我是子线程" << endl;
}

int main()
{
      thread th2(proc);
      th2.join();
      cout << "我是主线程" << endl;
      return 0;
}

输出:
技术图片

main()函数为主线程,需要把子线程的工作内容放到一个函数中(proc()),主线程中通过thread th2(proc)语句创建子线程,该语句执行完毕子线程就已经开始运行。此时创建了一个名为th2的子线程,该子线程的工作内容为执行函数proc中的内容。
th2.join()表示阻塞主线程,等待子线程执行完毕。
不执行th2.join()的后果:主线程已经结束运行,子线程还未执行完毕,会报错。

detach():

如果不想阻塞在这里就将join()换成使用线程的detach()方法,将线程与线程对象分离,线程就可以继续运行下去,并且不会造成影响。

#include<iostream>
#include<thread>
using namespace std;
void proc()
{
    cout << "我是子线程" << endl;
}

int main()
{
    thread th2(proc);
    th2.detach();
    cout << "我是主线程" << endl;
    return 0;
}

输出:
技术图片

此时,主线程已经结束运行,子线程还未执行完毕,不会报错。但是,主线程结束后子线程的输出就不会显示到控制台。

C++11多线程教程(创建线程)

标签:执行   ret   names   ios   使用   方法   控制   控制台   main   

原文地址:https://www.cnblogs.com/zizbee/p/13499650.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!