使用pthreads时的后台线程(不错,优先级)

时间:2012-12-07 12:08:09

标签: c++ c linux pthreads

我有一个使用pthreads进行大量后台处理的GUI应用程序。

当后台处理正在运行时,GUI非常无响应,我认为这是因为后台线程正在耗尽CPU时间。

在Windows上你可以在后台线程上设置:: SetThreadPriority(hThread,THREAD_PRIORITY_BELOW_NORMAL),一切都很顺利。

然而在Linux上我使用的是pthreads,我找不到一个好的选择。

我已经考虑过了;

  • :: sched_setscheduler(SCHED_FIFO)或:: sched_setscheduler(SCHED_RR) - 这是不可行的,因为它需要root(对我的GUI应用程序来说不太好) - 这也会使GUI线程拥有太多的CPU;我只希望GUI优先于后台线程。
  • :: pthread_setschedparam但是当使用不支持SCHED_FIFO或SCHED_RR以外的任何东西时(:: sched_get_priority_min(SCHED_OTHER)和:: sched_get_priority_max(SCHED_OTHER)都返回0)
  • 有多个进程并使用:: nice。 GUI和后台线程之间存在太多的耦合以使其可行(并且为此设计移植如此多的代码是一项大量的工作)。
  • 使用:: setpriority重新调整后台线程。这确实有效 - 但是直接反对文档所说的内容:PThreads documentation(因此可能会在以后的系统范围内“修复”)

我确信这是GUI应用程序的一种常见模式,所以我错过了什么?

马库斯。

编辑:添加:: setpriority到选项列表(感谢ZalewaPL)

1 个答案:

答案 0 :(得分:3)

将背景线程的漂亮值设置为更高可能会有所帮助 参考: Nice-Level for pthreads?