zoukankan      html  css  js  c++  java
  • 多线程中的信号与槽(下)

     

    可以看到void TestThread::run() end...没有被调用

    有趣的问题:
    如果线程体函数中开启了事件循环,线程如何正确结束?
    QThread::exec()使得线程进入事件循环
    -事件循环结束前,exec()后的语句无法执行
    -quit()和exit()函数用于结束事件循环
    -quit()等价于exit(0),exec()的返回值由exit()参数决定

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

    结束事件循环

     

    设计相关的问题
    什么时候需要在线程中开启事件循环?
    设计原则:
    事务性操作(间断性IO操作,等)可以开启线程的事件循环;每次操作通过发送信号的方式使得槽函数在子线程中执行。

    文件操作就是一种事务性操作

    概念小科普——文件缓冲区
    -默认情况下,文件操作时会开辟一段内存作为缓冲区
    -向文件中写入的数据会先进入缓冲区
    -只有当缓冲区满或者遇见换行符才将数据写入磁盘
    缓冲区的意义在于,减少磁盘的低级IO操作,提高文件读写效率。

    文件操作示例:

    Qt线程的使用模式
    -无事件循环模式
    后台执行长时间的耗时任务
    文件复制,网络数据读取,等

    -开启事件循环模式
    执行事务性操作
    文件写入,数据库写入,等

  • 相关阅读:
    spring 包的依赖关系
    菜鸟程序猿之IDEA快捷键
    eclipse的svn插件
    SVN使用教程总结
    Oracle 11g安装步骤详谈
    C3P0连接池的配置与使用
    Java课程设计
    201621123057 《Java程序设计》第14周学习总结
    201621123057 《Java程序设计》第13周学习总结
    201621123057 《Java程序设计》第12周学习总结
  • 原文地址:https://www.cnblogs.com/-glb/p/13463977.html
Copyright © 2011-2022 走看看