Qt 笔记:多线程中的信号与槽(下)

如果线程体函数中开启了事件循环,线程如何正常结束?

QThread::exec()使得线程进入事件循环

-事件循环结束前,exec()后的语句无法执行

-quit() 和 exit() 函数用于结束事件循环

-quit() <--> exit(0) ,exec() 的返回值有exit() 参数决定

ps:无论事件循环是否开启,信号发送后悔直接进行入对象所依附线程的事件队列;然而,只有开启了事件循环,对应的槽函数才会在线程中被调用。

什么时候需要在线程中开启事件循环?

设计原则

事务性操作(间断性IO操作,等)可以开启线程的事件循环;每次操作通过发送信号的方式使得槽函数在子线程中执行。

概念

-默认情况下,文件操作时会开辟一段内存作为缓冲区

-向文件中写入的数据会先进入缓冲区

-只有当缓冲区满或者遇见换行符才将数据写入磁盘

缓冲区的意义在于,减少磁盘的低级IO操作,提高文件读写效率!

Qt线程的使用模式

-无事件循环模式

·后台执行长时间的耗时任务

~文件复制,网络数据读取,等

-开启事件循环模式

·执行事务性操作

~文件写入,数据库写入,等

总结:

-QThread::exec() 是的线程进入事件循环

-quit() <--> exit(0) ,用于结束线程的事件循环并返回

-事务性操作可以开启线程的事件循环,将操作分摊到子线程

-工程开发中,多数情况不会开启线程的事件循环

-线程多用于执行后台任务或者耗时任务

事务性操作实例

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值