IT评测·应用市场-qidao123.com技术社区
标题:
qt QRunnable 与 QThreadPool详解
[打印本页]
作者:
九天猎人
时间:
2024-11-12 04:56
标题:
qt QRunnable 与 QThreadPool详解
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秒)。
#include <QCoreApplication>
#include <QThreadPool>
#include <QRunnable>
#include <QDebug>
#include <QThread>
// 定义一个QRunnable的子类
class MyTask : public QRunnable
{
public:
void run() override
{
qDebug() << "MyTask is running in thread:" << QThread::currentThread();
// 在这里执行具体的任务逻辑
}
};
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
// 获取全局QThreadPool对象
QThreadPool *threadPool = QThreadPool::globalInstance();
// 创建一个MyTask对象并启动它
MyTask *task = new MyTask();
threadPool->start(task);
// 等待所有任务完成(在这个简单示例中,我们只有一个任务)
threadPool->waitForDone();
return a.exec();
}
复制代码
以为有资助的话,打赏一下呗。。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
欢迎光临 IT评测·应用市场-qidao123.com技术社区 (https://dis.qidao123.com/)
Powered by Discuz! X3.4