Qt Creator:以处理器亲和性启动程序

Posted

技术标签:

【中文标题】Qt Creator:以处理器亲和性启动程序【英文标题】:Qt Creator: start programm with processor affinity 【发布时间】:2017-03-30 08:18:54 【问题描述】:

我需要为嵌入式设备调试应用程序。此应用程序的问题可能与时间有关,因此我尝试降低我的开发机器上的执行速度。

我有一个非常有用的设置,但为了方便起见需要稍微调整一下,基本上我遵循了这里给出的建议:

https://blogs.msdn.microsoft.com/vijaysk/2012/10/26/tools-to-simulate-cpu-memory-disk-load/

文章中链接的工具“CPUSTRES.exe”会产生高 CPU 使用率。为了防止该工具耗尽我所有的 CPU,我这样启动它(该工具只会在第 8 核上运行):

START "Stress" /affinity 0x80 /HIGH CPUSTRES.EXE

然后我在 Qt Creator(版本 4.1.0)中启动调试会话。使用 Windows 任务管理器,我可以为应用程序设置与压力工具相同的处理器亲和性。这样做会给我一个应用程序,它在嵌入式设备上或多或少有点迟钝,但调试器和所有其他应用程序的表现都很好。

我觉得在任务管理器中手动设置亲和度有点不方便。我希望这个应用程序总是只在同一个单核上。这仅用于调试目的,因此不想在代码中更改它。我怎样才能做到这一点?

【问题讨论】:

我知道您不想在代码中更改它,但这可能对您有用:***.com/questions/12803585/… 如果您只想在调试时使用它,您可以使用预处理器启用此代码块仅用于调试。 【参考方案1】:

虽然我设法以所需的处理器亲和性启动了被测应用程序,但我不推荐它。它不会让我的生活更轻松。相反,我建议按照@ni1ight 的注释在代码中设置亲和力。

简单的方法(没有被要求):

#include <windows.h>
int main(int argc, char* argv[]) 
#ifdef _DEBUG
    DWORD_PTR processAffinityMask = 1 << 7;
    HANDLE process = GetCurrentProcess();
    SetProcessAffinityMask(process, processAffinityMask);
#endif
    [...]

另一种方法(不合理):

查看项目设置 添加新的运行配置并选择“自定义可执行” 作为可执行文件,使用问题中的命令选择一个新的“cmd”文件 (START "" /affinity 0x80 AppUnderTest.EXE)。应该可以将应用程序路径作为参数提供给 cmd,但我没有尝试过。 然后可以从创建者启动应用程序,但无法调试。 将调试器附加到正在运行的进程以调试应用程序。

【讨论】:

以上是关于Qt Creator:以处理器亲和性启动程序的主要内容,如果未能解决你的问题,请参考以下文章

OpenGL 程序无法在 Qt Creator 中启动

不同的运行时行为取决于程序的启动方式(终端与 Qt Creator)

Qt Creator 无法启动调试器

无法在 Qt Creator 中启动 gdb.exe

以编程方式设置应用程序的处理器关联

QTimer 线程亲和性