-
-
[旧帖] [原创]测试线程时间片大小 0.00雪花
-
发表于: 2010-4-2 17:41 914
-
闲来写了一个测试线程时间片大小的程序玩玩,呵呵
在我的机器上测试下来,每次都不一样,大约在15到65毫秒居多,哪位大牛来解释一下?
LARGE_INTEGER nFrequency;
LARGE_INTEGER nCounterStart;
LARGE_INTEGER nCounterEnd;
QueryPerformanceFrequency(&nFrequency);
BOOL bLoop = TRUE;
while (bLoop)
{
LARGE_INTEGER nCounterStart1;
LARGE_INTEGER nCounterEnd1;
QueryPerformanceCounter(&nCounterStart1);
QueryPerformanceCounter(&nCounterEnd1);
if (double((nCounterEnd1.QuadPart - nCounterStart1.QuadPart))/double(nFrequency.QuadPart)> 0.000002)//执行两句话,用不了这么久,之间有线程切换
{
nCounterStart.QuadPart = nCounterEnd1.QuadPart;//时间片开始
while (bLoop)
{
QueryPerformanceCounter(&nCounterStart1);
QueryPerformanceCounter(&nCounterEnd1);
if (double((nCounterEnd1.QuadPart - nCounterStart1.QuadPart))/double(nFrequency.QuadPart)> 0.000002)
{
nCounterEnd.QuadPart = nCounterStart1.QuadPart;
//时间片结束
bLoop = FALSE;
}
}
}
}
// QueryPerformanceCounter(&nCounterStart);
// QueryPerformanceCounter(&nCounterEnd);
double dMinus = (double)(nCounterEnd.QuadPart - nCounterStart.QuadPart);
double dFrequency = (double)nFrequency.QuadPart;
double dTimes = dMinus/dFrequency;
int x = dTimes*1000000000;//转成纳秒
printf("%dns",x);
在我的机器上测试下来,每次都不一样,大约在15到65毫秒居多,哪位大牛来解释一下?
LARGE_INTEGER nFrequency;
LARGE_INTEGER nCounterStart;
LARGE_INTEGER nCounterEnd;
QueryPerformanceFrequency(&nFrequency);
BOOL bLoop = TRUE;
while (bLoop)
{
LARGE_INTEGER nCounterStart1;
LARGE_INTEGER nCounterEnd1;
QueryPerformanceCounter(&nCounterStart1);
QueryPerformanceCounter(&nCounterEnd1);
if (double((nCounterEnd1.QuadPart - nCounterStart1.QuadPart))/double(nFrequency.QuadPart)> 0.000002)//执行两句话,用不了这么久,之间有线程切换
{
nCounterStart.QuadPart = nCounterEnd1.QuadPart;//时间片开始
while (bLoop)
{
QueryPerformanceCounter(&nCounterStart1);
QueryPerformanceCounter(&nCounterEnd1);
if (double((nCounterEnd1.QuadPart - nCounterStart1.QuadPart))/double(nFrequency.QuadPart)> 0.000002)
{
nCounterEnd.QuadPart = nCounterStart1.QuadPart;
//时间片结束
bLoop = FALSE;
}
}
}
}
// QueryPerformanceCounter(&nCounterStart);
// QueryPerformanceCounter(&nCounterEnd);
double dMinus = (double)(nCounterEnd.QuadPart - nCounterStart.QuadPart);
double dFrequency = (double)nFrequency.QuadPart;
double dTimes = dMinus/dFrequency;
int x = dTimes*1000000000;//转成纳秒
printf("%dns",x);
赞赏
他的文章
- [原创]转向fpga开发的点滴体会 8138
- [讨论]WSASend的疑惑 8479
- [原创]今天看NT内核源码,有点小小心得,分享一下 9400
- [原创]程序员的智慧-聊聊那些经典设计和经典算法 13015
看原图
赞赏
雪币:
留言: