麻烦可靠地启用/禁用MMCSS

时间:2018-01-25 21:29:12

标签: c++

我正在尝试在我的项目中实施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吗?我应该打电话给其他/其他方法吗?

0 个答案:

没有答案