入力に追いつかない従来のVisual Studio win32 un-managed C++アプリケーションで問題を解決しようとしています。私の解決策の一環として、私はクラスとスレッドの優先順位をバンプすることを検討しています。XPアプリケーションでCPU使用率が増加しない
私のPCには、64ビットXPを実行する4つのxeonプロセッサが搭載されています。私は、4つのバックグラウンドループスレッドを作成する短いwin32テストアプリを作成しました。それぞれのスレッドは、それぞれ独自のプロセッサで実行されています。いくつかのコードサンプルを以下に示します。問題は、私が極端に優先順位をつけたとしても、CPU使用率は依然として1%以下です。
私のテストアプリケーションは32ビットで、WOW64で動作します。同じテストアプリケーションでは、32ビットxpマシンで1%未満のCPU使用率も使用されます。私は両方のマシンの管理者です。これを動作させるには他に何が必要ですか?あなたはそれが実際にCPU時間を食べたい場合は
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にバインドされていないことです。 IOバインドかディスクバインドかを調べるには、さらに調査する必要があります。 – ChrisF