我需要实现一种可以测量 Windows 中线程之间上下文切换的时间和 CPU 周期的方法。
这是我的代码
#include <stdio.h>
#include <windows.h>
#include <time.h>
LARGE_INTEGER initialTimeStamp, finalTimeStamp, freq;
DWORD ThreadProc(LPVOID lpdwThreadParam)
{
SwitchToThread();
return 0;
}
int main()
{
int result;
HANDLE hThread;
QueryPerformanceFrequency(&freq);
hThread = CreateThread(NULL,0, (LPTHREAD_START_ROUTINE)ThreadProc,NULL, 0, 0);
QueryPerformanceCounter(&initialTimeStamp);
SwitchToThread();
QueryPerformanceCounter(&finalTimeStamp);
result = (1000000 * ((finalTimeStamp.QuadPart - initialTimeStamp.QuadPart) / 2 ) / freq.QuadPart);
printf("Windows Thread - context switch time is %u ns\n", result);
WaitForSingleObject(hThread, INFINITE);
return 0;
}
注意:除以二,是因为我在 initialTimeStamp 和 finalTimeStamp 之间有两个上下文切换。
我不知道这是否是最好或正确的方法......每次执行我得到不同的时间,这不是我所期望的。我不确定如何获得多个 CPU 周期。