我尝试过用GetTickCount(),QueryPerformanceCounter()做定时器,然后读取系统时间。但是只有在定时为125ms的整数倍时,读出的时间间隔才是正确的;如果定时800ms,读出的时间间隔却不准确,如:UINT ShowTimeProc(LPVOID lParam)
{
CTDlg* pDlg=(CTDlg*)lParam;
DWORD dwstart,dwstop;
dwstop=GetTickCount();
while(1)
{
dwstart=dwstop;
::SendMessage(pDlg->m_hWnd,WM_UPDATETIME,0,0);
do
{
dwstop=GetTickCount();
}while(dwstop-125<dwstart);/////定时125ms
}
return 0;
}
结果如下:
2005 07 20 09 15 10.140
2005 07 20 09 15 10.265
2005 07 20 09 15 10.390
2005 07 20 09 15 10.515
2005 07 20 09 15 10.640
}while(dwstop-800<dwstart);/////定时800ms
结果如下:
2005 07 20 09 15 10.140
2005 07 20 09 15 10.952
2005 07 20 09 15 11.765
2005 07 20 09 15 12.577
2005 07 20 09 15 13.390
2005 07 20 09 15 14.140////////////中间间隔812或813ms,在最后的时候,总又能与第一次差5*800ms=4s,用QueryPerformanceCounter()也是同样,谁能给我解释一下,我希望能够定时100ms,结果如下:
2005 07 20 09 15 10.140
2005 07 20 09 15 10.240
2005 07 20 09 15 10.340
2005 07 20 09 15 10.440
该怎样实现?谢谢!请不吝赐教,高分酬谢,顶者有分。
{
CTDlg* pDlg=(CTDlg*)lParam;
DWORD dwstart,dwstop;
dwstop=GetTickCount();
while(1)
{
dwstart=dwstop;
::SendMessage(pDlg->m_hWnd,WM_UPDATETIME,0,0);
do
{
dwstop=GetTickCount();
}while(dwstop-125<dwstart);/////定时125ms
}
return 0;
}
结果如下:
2005 07 20 09 15 10.140
2005 07 20 09 15 10.265
2005 07 20 09 15 10.390
2005 07 20 09 15 10.515
2005 07 20 09 15 10.640
}while(dwstop-800<dwstart);/////定时800ms
结果如下:
2005 07 20 09 15 10.140
2005 07 20 09 15 10.952
2005 07 20 09 15 11.765
2005 07 20 09 15 12.577
2005 07 20 09 15 13.390
2005 07 20 09 15 14.140////////////中间间隔812或813ms,在最后的时候,总又能与第一次差5*800ms=4s,用QueryPerformanceCounter()也是同样,谁能给我解释一下,我希望能够定时100ms,结果如下:
2005 07 20 09 15 10.140
2005 07 20 09 15 10.240
2005 07 20 09 15 10.340
2005 07 20 09 15 10.440
该怎样实现?谢谢!请不吝赐教,高分酬谢,顶者有分。
解决方案 »
- 炫彩界面库有用过的吗
- 怎么在DLL中引用另一个DLL
- 关于《windows》程序设计中 Environ.c和 Head.c的问题
- 怎么让菜单一直高亮显示不变灰?
- 哪位侠义心肠的大哥能给小弟解释下“稀疏文件”是怎样一种机制~另外还有一些小问题
- 关与线程问题!!!
- 请问:关于自动提示
- 怎样控制软件的使用日期,比如15天的试用期,在线等待!!
- 安装了截获WM_CREATE的的HOOK后任务栏下不再出现HOOK程序后面运行的程序的最小化的小窗口(我不知道它叫什么)。给1分后有人回答再加50分
- 请问关于程序开始画面的问题 高分请教
- VC6下写的控制台程怎么处理事件?
- 做一个媒体播放的小程序,出错!请高手赐教!
========
Res
The following table describes the resolution of the system timer. System Resolution
Windows NT 3.5 and later The system timer runs at approximately 10ms.
Windows NT 3.1 The system timer runs at approximately 16ms.
Windows 95 and later The system timer runs at approximately 55ms.
一GetTickCount返回值的精确度,二是线程可能被切换。可以考虑多媒体定时器Multimedia Timer Functions
The following functions are used with multimedia timers.timeBeginPeriod
timeEndPeriod
timeGetDevCaps
timeGetSystemTime
timeGetTime
timeKillEvent
TimeProc
timeSetEvent
to: DentistryDoctor(My heart will fly,in the sky.)
多媒体定时器不会出现这样的问题吗?我怀疑并不是定时的精度有问题,而是系统时间的最小单位是1/2~n。