qt+Linux+arm多核CPU 亲和性
#include <QCoreApplication>
#include <QThread>
#include <pthread.h>
#include <sched.h>
#include <iostream>
void setThreadAffinity(int coreId) {
cpu_set_t cpuset;
CPU_ZERO(&cpuset);
CPU_SET(coreId, &cpuset);// 设置线程执行在cpu编号为cpu的核上
// 获取当前线程ID
pthread_t thread = pthread_self();
// 设置当前线程的亲和性
int result = pthread_setaffinity_np(thread, sizeof(cpu_set_t), &cpuset);
if (result != 0) {
qWarning() << "Failed to set thread affinity, error code:" << result;
} else {
qDebug() << "Thread successfully bound to CPU" << cpu;
}
}
class WorkerThread : public QThread {
public:
void run() override {
setThreadAffinity(1); // 绑定到 CPU 核心 1
std::cout << "Thread is running on core 1" << std::endl;
// 模拟一些工作
for (int i = 0; i < 1000000; ++i);
}
};
int main(int argc, char *argv[]) {
QCoreApplication a(argc, argv);
WorkerThread worker;
worker.start();
return a.exec();
}
目前大部分的CPU都支持多核,QT的主线程默认运行在第一个CPU的核心中,当执行复杂而耗时的任务是,程序界面有可能会出现卡顿,而其它的核心又没用到,白白浪费了资源。
qt的QThead类本身是没有设置cpu亲和性的接口的,需要自己封装一个接口将QT线程运行到指定的cpu核心中。
前提是要确定cpu是支持多核的
原文地址:https://blog.csdn.net/qq_24330911/article/details/144770502
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!