我需要用Labwindows/CVI完成一个数据采集任务,用异步定时器进行定时触发,每隔0.05s读取一次数据采集卡,并且需要这个时间间隔尽可能精确,期望精度能到正负1ms。我已经用GetAsyncTimerResolution函数测过系统的时钟分辨率是1ms。我用的系统是xp sp 2,cpu主频2.4GHz,内存512MB。我的问题是异步定时器能达到1ms的定时精度吗?如果不用硬件定时的方法,软件定时能达到这样的精度吗?先谢过了
1ms 已經是Windows 所能提供的最小時間間隔了.
If you run your program under Windows, +/- 1ms 的精確度不太可能達成,
because Windows still needs to provide CPU resource for other applications
at the same time.
If +/-1ms precision is absolutely required, try to use the function of buffer reading.
我在异步定时器回调函数中添加了如下函数,测出来的值大概都在50ms左右,最多差个1ms,在不同计算机上都试验过了。不知道这样能不算是异步定时器的定时精度?
QueryPerformanceCounter(&countstart);
QueryPerformanceFrequency(&frequent);
dsec = (double)timediff / (double)frequent.QuadPart;
countend = countstart;
if(dsec<1.0)
printf("elapsed time :%f(second)\n",dsec);
对于软件定时来说,我们说ms级的精度,其实并不特指1ms,而是几至十几ms这样一个量级。所以如果是软件定时,您的这个应用恐怕很难满足,当然如果您程序比较简单,或许实测下来也能满足要求,但是windows系统本身不提供这个确定性。
如果您要使用到ms级的精度,还是要用到硬件定时。