繁体   English   中英

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

[英]How to lower QT Gui thread priority?

我正在设计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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM