Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何降低QT Gui线程优先级?_C++_C_Linux_Qt_Real Time - Fatal编程技术网

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

C++ 如何降低QT Gui线程优先级?,c++,c,linux,qt,real-time,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) 我需要我的QtGUI总是让步,让这个实时过程有优先权。所以我尝试将QT

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

schparam.sched_priority = sched_get_priority_max(SCHED_FIFO);
pthread_setschedparam(pthread_self(),SCHED_FIFO, &schparam)
我需要我的QtGUI总是让步,让这个实时过程有优先权。所以我尝试将QT GUI线程优先级设置为

QThread::currentThread()->setPriority(QThread::LowestPriority);
但这仍然不起作用。如果我与GUI的交互时间过长,我的实时音频流就会发生xflow


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

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

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

要使用以下脚本,您需要修改脚本以更改您的应用程序名称。另外,在脚本中,我指定了应用程序的线程使用优先级为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

您是否尝试过使用sched_priority而不是QThread的优先级切换器来设置QThread::currentThread的优先级?是的。好主意,它似乎应该工作,但没有骰子。你认为GUI线程是罪魁祸首。您确定您的音频流线程没有出现问题吗?您确定优先级更改成功吗?音频线程如何与gui线程交互——比如说,您是否无意中强制优先级反转?我认为你的问题缺乏足够的细节。Qt代码正常。假设您检查错误,pthread代码是正常的。是的,我正在检查pthreads调用的返回值,它们都成功了。我可以让我的程序无休止地运行,它可以不使用xflow来流式传输音频,只要我不与GUI交互。一旦我开始在触摸屏上移动指针,几秒钟内我的音频线程就会出现下溢。关于接口,套接字侦听传入消息,并在请求时生成音频线程。相同的应用程序代码与CLI应用程序一样完美地运行。当我使用GUI时,我遇到了一些问题。现在我想知道问题是否在于触摸屏的设备驱动程序占用了我使用它时的CPU。我不知道如何检查,或者如何预防。