【发布时间】:2010-09-27 14:10:49
【问题描述】:
我需要实现一种方法,可以测量 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 周期数。
【问题讨论】:
标签: c windows multithreading context-switch