如何降低 QT Gui 线程优先级

How to lower QT Gui thread priority?

本文关键字:线程 优先级 Gui QT 何降低      更新时间:2023-10-16

我正在用linux设计一个嵌入式QT应用程序。我的应用程序的一部分是实时音频流,这是系统的重中之重,并且必须始终满足其实时截止日期。 我已将此线程设置为具有最大优先级的FIFO计划:

schparam.sched_priority = sched_get_priority_max(SCHED_FIFO);
pthread_setschedparam(pthread_self(),SCHED_FIFO, &schparam)

我需要我的 QT GUI 始终屈服并让这个实时过程具有优先权。所以我尝试将 QT GUI 线程优先级设置为

QThread::currentThread()->setPriority(QThread::LowestPriority);

然而,这仍然行不通。 如果我与 GUI 交互的时间过长,我的实时音频流就会流动。

我是否需要在此处设置其他优先级参数? 不幸的是,切换到实时内核不是一种选择。

如果您在 Linux 下运行,则可以创建一个脚本并在应用程序启动后运行该脚本。

以下示例脚本使用 chrt 更改 Qt 应用线程优先级。

若要使用以下脚本,需要修改脚本以更改"your_qt_app"名称。此外,在脚本中,我分配了your_qt_app线程以使用优先级为 10 的 FIFO 实时策略。您可以根据需要进行相应的调整。

此外,脚本中的"ps"命令可以帮助您分析系统进程/线程优先级。

#!/bin/bash
threads_to_change_prio="
    your_qt_app
 "
 ps -Leo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm,args  > ./threads_prio.txt
 for i in $threads_to_change_prio; do
      tids=$(cat ./threads_prio.txt | grep $i | awk '{print $2}');
      for j in $tids; do        
          chrt -f -p 10 $j;
      done
 done