Qt线程池QThreadPool用法

 时间:2024-10-29 11:14:13

本文主要讲解QThreadPool相关函数,并通过demo程序演示它的用法

工具/原料

qt

visual studio

QRunnable类

1、QThreadPool启动的线程,需要从QRunnable类继承。需要实现QRunnable类的run虚函数

2、类CMyRunnale的run函数,实现了一个隔一秒钟打印一次的方法

Qt线程池QThreadPool用法

QThreadPool函数

1、QThreadPool * globalInstance() 该函数为静态函数返回一个全局的QThreadPool实例

2、void setMaxThreadCount(int maxThreadCount)设置线程池中,最多可以启动的线程个数

3、void start(QRunnable * runnable, int priority = 0)启动一个线程,需要是QRunnable类型的参数

4、bool waitForDone(int msecs = -1)等待线程退出,可以等待指定的时间,也可以无限制等待直到所有线程退出

5、void setExpiryTimeout(int expiryTimeout)设置超时时间,设置线程指定时间无操作时,则退出。可以设置为-1,没有超时限制

QThreadPool示例

1、设置线程池的线程个数为2,设置线程永不超时,然后启动三个线程,查看线程调度情况。

Qt线程池QThreadPool用法

2、结果:任务列表中有三个,但是总线程数是二,所以先运行两个线程,等到线程池有空闲线程时,才从任务列表中取新任务来运行

Qt线程池QThreadPool用法

3、修改代码中设置线程的超时时间为2秒

Qt线程池QThreadPool用法

4、结果:任务列表中有三个任务,共有两个线程来执行。当前两个任务完成后,还剩一个任务由其中一个线程来执行,另外一个线程就处于空闲状态。等到空闲2秒后,该空闲线程就会退出

Qt线程池QThreadPool用法

5、先调用reserveThread预留一个线程,等待4秒后再启用这个线程

Qt线程池QThreadPool用法

6、结果:初始一个线程执行任务,在调用releaseThread后,有两个线程同时执行任务

Qt线程池QThreadPool用法

疑问

1、在CMyRunnale类中,设置了setAutoDelete(false)。在它的析构函数中,增加打印信息。线程池调用clear函数时,并没有看到CMyRunnale析构函数的打印信息。不知道是否释放或什么时候释放。

2、void releaseThread() 和void reserveThread() 函数具体怎么用,什么时候用还没有弄清楚

  • 袜子改造小宝宝鞋
  • 广西巴马自驾游推荐
  • 四不像饼的做法
  • 详情页有哪些必备元素
  • 原油是怎么定价的?
  • 热门搜索
    孕妇什么时候开始补钙 afford什么意思 庚日是什么意思 什么是消费税 mojito是什么 维生素b2 送男朋友什么生日礼物 yy是什么软件 母亲节是什么时候? 维生素b6功能与作用