zoukankan      html  css  js  c++  java
  • 【C++多线程】detach()及注意

    基础

      detach()的作用是将子线程和主线程的关联分离,也就是说detach()后子线程在后台独立继续运行,主线程无法再取得子线程的控制权即使主线程结束,子线程未执行也不会结束。当主线程结束时,由运行时库负责清理与子线程相关的资源。实际应用如让一个文字处理应用同时编辑多个文档,让每个文档处理窗口拥有自己的线程,每个线程运行同样的代码,并隔离不同窗口处理的数据。

     1 #include <thread>
     2 #include <iostream>
     3 
     4 using namespace std;
     5 
     6 void func()
     7 {
     8     cout << "子线程func开始执行!" << endl;
     9     //do something
    10     cout << "子线程func执行结束!" << endl;
    11 }
    12 
    13 int main()
    14 {
    15     cout << "主线程main开始执行!" << endl;
    16     thread t(func);
    17     t.detach();
    18     cout << "主线程main执行结束!" << endl;
    19     return 0;
    20 }

    注意

      detach()同时也带来了一些问题,如子线程要访问主线中的对象,而主线中的对象又因为主线程结束而被销毁时,会导致程序崩溃。所以传递参数时需要注意一些陷阱。关于参数传递:https://www.cnblogs.com/chen-cs/p/13056703.html  

      1、访问主线程对象以及指针问题

      2、构造线程时隐式转换问题,子线程可以还来不及转换,主线程对象就销毁了,解决方法是构造线程时,构造一个临时对象传入

      

  • 相关阅读:
    Java实体类的属性类型与数据库表字段类型对应表
    MyBatis的settings设置描述
    Hibernate的属性配置
    eclipse快捷键
    2018年计划
    Django之Form组件归类
    Django之Form组件补充
    Django之Form组件
    Django之中间件
    Django之分页升级版本(组件)
  • 原文地址:https://www.cnblogs.com/chen-cs/p/13056713.html
Copyright © 2011-2022 走看看