关于Sleep的精度测试
2015-01-16 11:10
232 查看
一直在网上看到一些文章,说windows上面的Sleep精度如何不精确等等,在部门内部也引起了这方面的争论,为了证明事实,特意写下面的例子做测试。
测试的要点在,主线程Sleep一分钟,而子线程函数则以1~7毫秒作为Sleep单位,子线程里面,每Sleep一次则计数一次。同时,使用多个线程测试,如此两方面做对比,看效果。
测试结果证明,Sleep还是比较精确的,在有些电脑上,可以达到1毫秒之内的误差,而在有些电脑上,可以达到2毫秒以内的误差。
1毫秒之内误差的机器CPU是台式机:Intel(R)Core(TM)i3-3220 CPU @ 3.30GHz 3.30 GHz
2毫秒之内误差的机器CPU是笔记本:Intel(R)Core(TM)i5-2450 CPU @ 2.50GHz 2.49 GHz
#include <windows.h>
bool g_bStoped = false;
typedef struct ttt
{
int nSleepTime;
char tag[12];
}tt;
DWORD WINAPI ThreadRtspServer(LPVOID arg)
{
tt *p = (tt*)arg;
int nCount= 0;
while(!g_bStoped)
{
Sleep(p->nSleepTime);
nCount++;
}
fprintf(stderr, "%s has happened %d times\n", p->tag, nCount);
return 0;
}
#define MAXTHREAD 300
#define SLEEP_TIME 7
int _tmain(int argc, _TCHAR* argv[])
{
g_bStoped = false;
DWORD l_rtsp_tid = 0;
int nSleepTime=1;
tt arg[MAXTHREAD];
for (int i = 0; i < MAXTHREAD; i++)
{
tt * t = &arg[i];
t->nSleepTime = SLEEP_TIME;
sprintf(t->tag, "tag:%d", i);
CreateThread( NULL, 0, ThreadRtspServer, (LPVOID)t, 0, &l_rtsp_tid );
}
Sleep(60 * 1000);
g_bStoped = true;
Sleep(90000000);
return 0;
}
一直在网上看到一些文章,说windows上面的Sleep精度如何不精确等等,在部门内部也引起了这方面的争论,为了证明事实,特意写下面的例子做测试。
测试的要点在,主线程Sleep一分钟,而子线程函数则以1~7毫秒作为Sleep单位,子线程里面,每Sleep一次则计数一次。同时,使用多个线程测试,如此两方面做对比,看效果。
测试结果证明,Sleep还是比较精确的,在有些电脑上,可以达到1毫秒之内的误差,而在有些电脑上,可以达到2毫秒以内的误差。
1毫秒之内误差的机器CPU是台式机:Intel(R)Core(TM)i3-3220 CPU @ 3.30GHz 3.30 GHz
2毫秒之内误差的机器CPU是笔记本:Intel(R)Core(TM)i5-2450 CPU @ 2.50GHz 2.49 GHz
#include <windows.h>
bool g_bStoped = false;
typedef struct ttt
{
int nSleepTime;
char tag[12];
}tt;
DWORD WINAPI ThreadRtspServer(LPVOID arg)
{
tt *p = (tt*)arg;
int nCount= 0;
while(!g_bStoped)
{
Sleep(p->nSleepTime);
nCount++;
}
fprintf(stderr, "%s has happened %d times\n", p->tag, nCount);
return 0;
}
#define MAXTHREAD 300
#define SLEEP_TIME 7
int _tmain(int argc, _TCHAR* argv[])
{
g_bStoped = false;
DWORD l_rtsp_tid = 0;
int nSleepTime=1;
tt arg[MAXTHREAD];
for (int i = 0; i < MAXTHREAD; i++)
{
tt * t = &arg[i];
t->nSleepTime = SLEEP_TIME;
sprintf(t->tag, "tag:%d", i);
CreateThread( NULL, 0, ThreadRtspServer, (LPVOID)t, 0, &l_rtsp_tid );
}
Sleep(60 * 1000);
g_bStoped = true;
Sleep(90000000);
return 0;
}
相关文章推荐
- 关于C#中几种定时器精度的测试与探究
- Win32函数Sleep的精度测试
- Win32函数Sleep的精度测试
- 关于1ms精度的计时延时器的基本测试
- 关于字符集的测试报告
- 关于测试驱动开发的文章
- 关于测试驱动开发
- 关于软件质量和软件测试的一点点看法
- 关于软件测试
- 关于Oracle 9i 跳跃式索引扫描(Index Skip Scan)的小测试
- 关于DB2的简单并行性能测试
- 这2天看了不少关于dotnet方面关于测试的东东,头有点晕。
- 关于测试和调试
- 关于测试工程师的角色定位
- 关于计划测试
- 关于executeBatch()的测试
- 关于软件测试关于软件测试
- 关于INT、GUID与COMB在使用效率上的测试
- 关于软件测试
- Windows时钟函数精度测试