qt QRunnable 与 QThreadPool详解

打印 上一主题 下一主题

主题 1555|帖子 1555|积分 4665

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
1. 概述

QRunnable是全部runnable对象的基类,它表示一个使命或要执行的代码。开发者需要子类化QRunnable并重写其run()函数来实现具体的使命逻辑。而QThreadPool则是一个管理QThread聚集的类,它资助减少创建线程的成本,通过管理和循环利用单独的QThread对象来执行使命队列中的使命。每个Qt应用步调都有一个全局QThreadPool对象,可以通过调用globalInstance()来访问。
2. 重要方法



  • QRunnable类

    • run(): 这是一个纯虚函数,需要子类化QRunnable并实现这个函数来定义使命的具体举动。
    • setAutoDelete(bool autoDelete):设置使命执行完成后是否自动删除对象。
    • autoDelete()const:返回使命是否自动删除对象。




  • QThreadPool类

    • globalInstance(): 获取全局QThreadPool对象的静态方法。
    • start(QRunnable *runnable, int priority = 0): 启动一个新的使命。runnable参数是要执行的使命对象,priority参数用于设置使命的优先级。假如runnable的autoDelete属性为true,则QThreadPool会在使命执行完毕后自动删除runnable对象。
    • tryStart(QRunnable *runnable): 实验立刻启动一个使命。假如没有可用的线程,则此函数不执行任何操作并返回false。
    • waitForDone(int msecs = -1): 等候全部使命完成并从线程池中删除全部线程。msecs参数指定了最多等候的毫秒数,假如为-1(默认值),则忽略超时,直到最后一个线程退出。
    • activeThreadCount(): 返回当前正在工作的线程数量。
    • maxThreadCount(): 返回线程池允许的最大线程数量。
    • setMaxThreadCount(int maxThreads): 设置线程池允许的最大线程数量。
    • setExpiryTimeout(int expiryTimeout): 设置线程在未利用时到期的超时时间(毫秒)。默认值是30000毫秒(30秒)。

  1. #include <QCoreApplication>
  2. #include <QThreadPool>
  3. #include <QRunnable>
  4. #include <QDebug>
  5. #include <QThread>
  6. // 定义一个QRunnable的子类
  7. class MyTask : public QRunnable
  8. {
  9. public:
  10.     void run() override
  11.     {
  12.         qDebug() << "MyTask is running in thread:" << QThread::currentThread();
  13.         // 在这里执行具体的任务逻辑
  14.     }
  15. };
  16. int main(int argc, char *argv[])
  17. {
  18.     QCoreApplication a(argc, argv);
  19.     // 获取全局QThreadPool对象
  20.     QThreadPool *threadPool = QThreadPool::globalInstance();
  21.     // 创建一个MyTask对象并启动它
  22.     MyTask *task = new MyTask();
  23.     threadPool->start(task);
  24.     // 等待所有任务完成(在这个简单示例中,我们只有一个任务)
  25.     threadPool->waitForDone();
  26.     return a.exec();
  27. }
复制代码


以为有资助的话,打赏一下呗。。
           


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

九天猎人

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表