QT中实现C++使用线程操作(qt实现多线程文件传输)

yumo6662个月前 (08-18)技术文章60

自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;

}

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

相关文章

Qt多线程编程两种方式详解(qt开启线程的三种方式)

QT的多线程编程主要有两种方式:第一种是继承自QThread,然后重写run()函数;第二种是继承自QObject,然后把整个对象moveToThread;两种方法比较:第一种方法只有run()函数是...

正点原子I.MX6U嵌入式Qt开发指南:第十章《多线程》

今日头条/西瓜视频/抖音短视频 同名:正点原子原子哥今日头条/西瓜视频/抖音短视频账号:正点原子-原子哥感谢各位的关注和支持,你们的关注和支持是正点原子无限前进的动力。第十章《多线程》我们写的一个应用...

Qt 的4种多线程实现详解(qt实现多线程文件传输)

为何需要多线程?1、进行耗时操作时,可以处理用户的其他输入输出。比如,如果在UI线程里面进行耗时操作,界面会不响应用户操作。2、提升程序性能。现在的电脑一般都是多核CPU,多线程并行处理事务,可以大大...

Qt快速入门(工程的创建、UI界面布局、多线程、项目)

本文档将介绍QT工程的创建、UI界面布局,并以计数器为例了解QT中多线程的用法,最终完成一个基础的QT项目。1 创建QT工程文件在安装好QT之后,能够在其安装组件中找到Qt Creator,点击设置项...

Qt 多线程之QThreadPool(qt多线程movetothread)

上述的方法需要手动建立线程,如果并发线程数量较多,而且每个线程只执行较短的任务就结束,这样就会导致线程的频繁创建和销毁,从而降低效率。因此给出另外一种做法--线程池QThreadPool。线程池的优点...

基于Qt多线程实现UDP通信(qt实现多线程文件传输)

# 演示先演示,在展开如何实现,本次代码在windows、linux、mac都可使用。大家不能光看,实际敲一敲,敲出强大,敲出好工作。简单理解:服务器-》发送hello-》客户端也可以不写客户端或者服...