XP 应用程序不会增加 CPU 利用率
XP app won't increase cpu utilization
我正试图修复一个遗留的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,这应该会强制它不删除计算。
相关文章:
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 在模拟器中使用并集来模拟CPU寄存器有多合适
- 编写一个函数以使用 n 百分比的 CPU 使用率
- 如何禁用 CPU 的无序执行
- CPU 瓶颈;处理具有许多非静态对象的 3D 场景渲染的简单方法
- 分别测量每个线程上花费的 CPU 时间(C++)
- 什么时候最好在子进程中使用 CPU 或 I/O 密集型代码 [ C++ ]
- 在程序运行时监视 VxWorks 中的任务 CPU 利用率
- 对于等待以 std::future wait() 返回的函数的 CPU 使用率或检查标志在循环中休眠一段时间哪个更好?
- 您选择的 CPU 不支持 x86-64 指令集
- 使用vsync(OpenGL)时CPU利用率为100%
- 使用LIBPROC在C 中找到CPU利用率
- 在 XCODE 5 中将 CPU 利用率提高到 100% 以上
- 100% CPU 利用率在 gettimeofday、QTime 或 QLabel->setText
- 使用MQTT deamon时CPU利用率高.
- 如何在linux中以1秒粒度找到精确的cpu利用率
- 如何为适当的CPU利用率编写代码
- 如何以编程方式从工作线程获得父线程和兄弟线程的CPU利用率
- XP 应用程序不会增加 CPU 利用率
- 在C++中查找系统的CPU利用率