经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 程序设计 » C++ » 查看文章
QT中实现C++使用线程操作
来源:cnblogs  作者:毛橘  时间:2020/11/23 12:24:50  对本文有异议

自C++11开始后C++有了标准的线程库:std::thread,各种支持C++11及更改版本的IDE都可以使用,便于是使用C++开发多线程库供多平台使用。

话不多说,直接上代码简单明了:

例程1:

 


 

运行后发现线程函数正常运行,但是程序会报错,如下所示:

这是因为创建了线程后线程开始执行,但是主线程main()并没有停止脚步,仍然继续执行然后退出,此时创建的子线程还在运行,线程仍然存在但指向它的线程对象已经销毁,所以会抛出异常。那么怎样才能保证主线程在子线程退出后再退出呢?


 

 


 


运行结果:

本次运行正常没有再出现异常,可从运行结果可以看到“this is Main”这句话是在子线程运行完成后才打印的,这说明thread::join()接口会堵塞主线程。thread::detach()thread::detach()接口也可以解决最开始的异常问题,

 

detach是用来和线程对象分离的,这样线程可以独立地执行,不过这样由于没有thread对象指向该线程而失去了对它的控制,当对象析构时线程会继续在后台执行,但是当主程序退出时并不能保证线程能执行完。如果没有良好的控制机制或者这种后台线程比较重要,最好不用detach而应该使用join。


 


int main(int argc, char *argv[])

{

    std::thread t1(f1);

    std::thread t2(f2);

    t1.detach();

    t2.detach();

    std::cout << "this is Main \n";

    return 0;

}

由结果可见线程并没有执行完而退出:


 

原文链接:http://www.cnblogs.com/maoju/p/14001504.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号