Qt中多线程的使用

最近项目中提出了新的需求,需要采集和收集图片。因为是高速相机,按照帧率至少200FPS的速度计算的话,30秒时间的图片也就是6000帧,同时要保持尽量不掉帧。因此这个开发任务就有两个重点:

  • 如何能够在收集图片的时候不掉帧,把30秒钟采集到的图片尽可能的采集和收集到;
  • 在保存文件时,如何能够保证界面的及时响应,因为需要存放大量的图片,在只有一个线程工作的情况下,势必不能保持界面的良好响应;

对于第一点,个人采取的方案是只能是在采取完所有的图片之后,再将图片从内存中写入到硬盘中。这样保证了采集速率和缓速率之间的瓶颈。但是不足的是,如果按照图片的分辨率是640*480,那么6000张图片就是1.7G。所以,会占据很大的内存。同时需要考虑到合适的数据结构,对于1.7个G的数据量,如果采用数组是不合适的,因为数组是连续的分配内存空间,那么对于内存较小的内存空间,就会分配失败。那么比较好的数据结构,应该是采用链表。因此我没有采用vector的数据结构,而是采用了list的数据结构

对于第二点,当内存中已经采取到6000帧数据,从内存写入到硬盘中去的时候,会耗费比较大的时间以及CPU的运行,因此如果在单线程中,势必会影响到界面的良好响应,所以必须采用多线程来实现。目前为止,我的技能只有两个,一个是pthread线程机制,一个是不太熟悉的QThread机制,也就是Qt提供的多线程机制,因为不了解,所以我采用了pthread线程机制,但是在实现中出现了个一个重要的问题:

  • 实际上,得到需要的数据后,可以很好的保持界面的响应,同时保持“不可见的后台”写入数据的线程。这一点是实现了的。但是我还希望通过在写入的过程中,实时更新写入状态,通过进度条来显示写入进度,这样就出现了一个错误,即Q
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值