QT 线程池执行按钮事件
时间: 2023-09-15 18:18:00 浏览: 97
QT多线程—主界面卡死解决方案
4星 · 用户满意度95%
在 Qt 中,可以使用 QThreadPool 类来实现线程池。以下是一个示例,演示如何在单击按钮时使用线程池执行任务:
```cpp
// 在类的头文件中声明线程池
#include <QThreadPool>
QThreadPool threadPool;
// 在按钮的槽函数中创建任务并提交到线程池
void MainWindow::on_pushButton_clicked()
{
// 创建任务
MyTask *task = new MyTask();
// 设置任务的数据
task->setData(data);
// 将任务提交到线程池中执行
threadPool.start(task);
}
```
其中,MyTask 是一个自定义类,继承自 QRunnable 类,用于执行具体的任务。在 MyTask 类中,需要实现 run() 函数,用于执行任务的具体逻辑。
```cpp
class MyTask : public QRunnable
{
public:
void setData(const QString &data)
{
m_data = data;
}
protected:
void run() override
{
// 在这里执行具体的任务逻辑
qDebug() << "Task started with data: " << m_data;
// ...
}
private:
QString m_data;
};
```
在执行任务时,线程池会自动分配线程来执行任务,可以根据需要调整线程池的最大线程数。例如,可以在主函数中设置线程池的最大线程数为 4:
```cpp
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
// 设置线程池的最大线程数为 4
QThreadPool::globalInstance()->setMaxThreadCount(4);
MainWindow w;
w.show();
return a.exec();
}
```
阅读全文