XP 应用程序不会增加 CPU 利用率

XP app won't increase cpu utilization

本文关键字:CPU 利用率 增加 应用程序 XP      更新时间:2023-10-16

我正试图修复一个遗留的Visual Studio win32非托管c++应用程序的问题,该应用程序无法跟上输入。作为我的解决方案的一部分,我正在探索提高类和线程的优先级。

我的电脑有4个xeon处理器,运行64位XP。我写了一个简短的win32测试应用程序,它创建了4个后台循环线程,每个线程在自己的处理器上运行。下面显示了一些代码示例。问题是,即使我把优先级调到极限,cpu利用率仍然不到1%。

我的测试应用程序是32位,运行在WOW64上。同样的测试应用程序在32位xp机器上的cpu利用率也低于1%。我是两台机器的管理员。我还需要做什么才能让它工作?

DWORD __stdcall ThreadProc4 (LPVOID)
{
    SetThreadPriority(GetCurrentThread(),THREAD_PRIORITY_TIME_CRITICAL);
    while (true)
    {
        for (int i = 0; i < 1000; i++)
        {
            int p = i;
            int red = p *5;
            theClassPrior4 = GetPriorityClass(theProcessHandle);
        }
        Sleep(1);
    }
}
int APIENTRY _tWinMain(...)
{
...
    theProcessHandle = GetCurrentProcess();
    BOOL theAffinity = GetProcessAffinityMask(
        theProcessHandle,&theProcessMask,&theSystemMask);
    SetPriorityClass(theProcessHandle,REALTIME_PRIORITY_CLASS);
    DWORD  threadid4 = 0;
    HANDLE thread4   = CreateThread((LPSECURITY_ATTRIBUTES)NULL,
        0,
        (LPTHREAD_START_ROUTINE)ThreadProc4,
        NULL,
        0,
        &threadid4);
    DWORD_PTR theAff4 = 8;
    DWORD_PTR theAf4 = SetThreadAffinityMask(thread1,theAff4);
    SetThreadPriority(thread4,THREAD_PRIORITY_TIME_CRITICAL);
    ResumeThread(thread4);

好吧,如果你想让它实际占用CPU时间,你会想要删除'Sleep'调用-你的'处理'没有花费大量的时间,所以它花了大部分时间睡觉。

你还想看看优化器对你的代码做了什么。如果它完全删除了循环中的'p'和'red'(以及乘法),我不会感到惊讶(因为结果从未使用过)。您可以尝试将'red'标记为volatile,这应该会强制它不删除计算。