我正在尝试在我的项目中实施MMCSS以改善时序性能,我看到了奇怪的行为。我是一名挣扎着做软件的低级嵌入式软件开发人员,这是我在这里发表的第一篇文章,所以如果我的描述需要有效,我们将非常感谢您的耐心和理解。
我无法共享我的所有代码,但这里有一些伪代码显示我是如何应用MMCSS的(主要来自MSDN的独占模式流示例:https://msdn.microsoft.com/en-us/library/bb614507.aspx):
main()
{
\\ setup/initialize some things
DWORD taskIndex = 0;
HANDLE hTask = NULL;
hTask = AvSetMmThreadCharacteristics(TEXT("Pro Audio"), &taskIndex);
if (hTask == NULL)
{
return 1;
}
while(1)
{
\\ print time since last loop
\\ do things - some conditions will break out of loop
\\ sleep
}
if (hTask != NULL)
{
AvRevertMmThreadCharacteristics(hTask);
}
}
我所看到的行为难以完全刻画。当我运行我的项目时,如果MMCSS成功应用(可能不是我运行我的代码的前几次),它似乎在我运行exe的整个过程中可靠地工作。如果它在前一次运行正确,那么它将在每次运行后正确运行。但是,如果我注释掉MMCSS代码并重建并运行,它将继续表现得好像应用了MMCSS。我发现如果我重新启动计算机然后重新运行,我将获得时间信息,表明不再应用MMCSS。
似乎我遗漏了一些导致从启用MMCSS到禁用(反之亦然)的转换变得混乱的问题。我在错误的地方调用SetMmThreadCharacteristics和RevertMmThreadCharacteristics吗?我应该打电话给其他/其他方法吗?