gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 00:36:12 25 4
gpt4 key购买 nike

我有一个 GUI 应用程序,它使用 pthreads 进行一些繁重的后台处理。

虽然后台处理正在运行,但 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)

最佳答案

将后台线程的 nice 值设置得更高可能会有所帮助。
引用这个: Nice-Level for pthreads?

关于c++ - 使用 pthreads 时的后台线程(不错,优先级),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13762799/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com