如何降低QT Gui线程的优先级?

时间:2014-02-20 20:05:12

标签: c++ c linux qt real-time

我正在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交互的时间太长,我的实时音频流就是xflowing。

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

1 个答案:

答案 0 :(得分:0)

如果您在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