zoukankan      html  css  js  c++  java
  • QT多线程

    Qt为开发多线程应用程序提供了多种不同的解决方案。解决方案的选择依赖于新线程的目的以及线程的生命周期。

    下表转自 http://blog.csdn.net/chinabinlang/article/details/35988801

    生命周期

    开发任务

    解决方案

    一次调用

    在另一个线程中运行一个函数,函数完成时退出线程

    编写函数,使用QtConcurrent::run 运行它

    派生QRunnable,使用QThreadPool::globalInstance()->start() 运行它

    派生QThread,重新实现QThread::run() ,使用QThread::start() 运行它

    一次调用

    需要操作一个容器中所有的项。使用处理器所有可用的核心。一个常见的例子是从图像列表生成缩略图。

    QtConcurrent 提供了map()函你数来将操作应用到容器中的每一个元素,提供了fitler()函数来选择容器元素,以及指定reduce函数作为选项来组合剩余元素。

    一次调用

    一个耗时运行的操作需要放入另一个线程。在处理过程中,状态信息需要发送会GUI线程。

    使用QThread,重新实现run函数并根据需要发送信号。使用信号槽的queued连接方式将信号连接到GUI线程的槽函数。

    持久运行

    生存在另一个线程中的对象,根据要求需要执行不同的任务。这意味着工作线程需要双向的通讯。

    派生一个QObject对象并实现需要的信号和槽,将对象移动到一个运行有事件循环的线程中并通过queued方式连接的信号槽进行通讯。

    持久运行

    生存在另一个线程中的对象,执行诸如轮询端口等重复的任务并与GUI线程通讯。

    同上,但是在工作线程中使用一个定时器来轮询。尽管如此,处理轮询的最好的解决方案是彻底避免它。有时QSocketNotifer是一个替代。

     

  • 相关阅读:
    一、常用命令
    八、继承和聚合
    六、生命周期
    七、创建Web工程以及插件原理
    pl/sql developer学习总结
    Oracle创建用户及授权
    Oracle客户端安装
    oracle INS-13001 客户端安装-环境不满足最低要求
    ORA-28001: the password has expired密码过期
    ORA-28000--ORACLE用户被锁
  • 原文地址:https://www.cnblogs.com/ph829/p/6306934.html
Copyright © 2011-2022 走看看