我正在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。
我需要在这里设置一些其他优先级参数吗?不幸的是,切换到实时内核不是一种选择。
答案 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