提升:如何设置程序优先级?

时间:2010-12-02 11:11:20

标签: c++ boost

如何使用Boost C ++库设置程序/线程优先级(在谈论线程时我指的是使用Boost库创建的线程)?我的意思是跨平台的方式......

3 个答案:

答案 0 :(得分:4)

升级本身并没有普遍的跨平台优先支持。

#ifdef是你的朋友......

请参阅Tom对win32解决方案的回答。

在Linux上,您可以使用nice调用(或可能setpriority)。不要被那些文件调整 process 优先级的陈述推迟;在Linux上,线程只是一个与其他进程/进程共享内存空间的进程。如果你给自己找到一个更好的“top”版本,它列出了各个线程,你可以看到每个线程的好处。

请注意,具有普通用户权限的进程/线程只能在Linux上降低其优先级(更高的“nice”值)。我在Windows上完成了一些优先工作,看起来似乎有所作为(但是在XP上;在Vista之后,UAC等情况可能会有所不同)。

答案 1 :(得分:2)

答案 2 :(得分:1)

以前的答案关于Windows的评论允许用户将优先级更改为他们想要的任何内容部分是正确的,但有一些例外 - 一,通常不允许实时优先级(即使使用UAC提升)。它需要一个特殊的安全令牌。该令牌通常可供管理员使用,但该流程必须请求它。

此外,至少在Vista +中,提升外部进程的优先级是仅为默认安全策略中的管理员保留的权限。但是,这仅适用于EXTERNAL进程 - 因此不会影响您设置自己的优先级的能力。

更改进程优先级时,请记住在Windows中,您要更改该进程中所有线程的“基本”优先级。您可以保持优先级正常,并根据需要调整特定线程的优先级(SetThreadPriority API与SetPriorityClass API)。这可能是您自己的应用程序的首选。

我不认为这是这种情况,但是警告 - 如果作用于外部进程(不是您自己的),永远不会更改单个线程另一个过程的重点。相反,只需更改优先级类,以便所有线程优先级在调度重要性方面保持相同的相对差异。

没有跨平台的方法,因为行为是如此不同。正如之前的海报建议的那样,条件编译指令将在这种情况下使用。