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:以处理器亲和性启动程序的主要内容,如果未能解决你的问题,请参考以下文章