使用Qt线程库实现多核运行的代码
时间: 2023-12-14 12:40:23 浏览: 56
使用Qt线程库可以方便地实现多核运行,以下是一个简单的示例代码:
```cpp
#include <QCoreApplication>
#include <QDebug>
#include <QThread>
#include <QThreadPool>
class Worker : public QRunnable {
public:
Worker(int id) : m_id(id) {}
void run() override {
qDebug() << "Thread" << QThread::currentThreadId() << "Worker" << m_id << "started";
for (int i = 0; i < 100000000; i++) {
// do some work
}
qDebug() << "Thread" << QThread::currentThreadId() << "Worker" << m_id << "finished";
}
private:
int m_id;
};
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
// set the maximum number of threads to use
QThreadPool::globalInstance()->setMaxThreadCount(QThread::idealThreadCount());
// create some workers and add them to the thread pool
for (int i = 0; i < 8; i++) {
QThreadPool::globalInstance()->start(new Worker(i));
}
return a.exec();
}
```
在上面的代码中,我们定义了一个 `Worker` 类,并让它继承自 `QRunnable` 类。`QRunnable` 是一个轻量级的接口类,用于在 Qt 线程池中执行任务。在 `Worker` 类中,我们实现了 `run()` 函数,这个函数就是我们要在多个线程中执行的工作。
在 `main()` 函数中,我们首先设置了线程池的最大线程数为当前系统的理论最大线程数。然后,我们创建了 8 个 `Worker` 对象,并将它们添加到线程池中。`QThreadPool` 会自动根据当前的负载情况和可用线程数,分配任务给不同的线程执行。
在运行这个程序时,你会看到输出的日志中,不同的 `Worker` 对象被分配到了不同的线程中运行。这就实现了多核运行。