 |
你可以在程序启动时先运行一个循环,比如10000次空循环,计算一下运行时间。可以利用Win API的timeGetTime函数或QueryPerformanceCounter函数。然后根据你需要的延时时间确定大概需要运行多少次循环,然后把计算出的数传递给DMA驱动程序。
谢旭良问:
本问题涉及的操作系统 :win98
本问题涉及的编程工具 :VC++6.0
遇到的问题:
在编写一个数据采集程序时,由于采集频率比较高1000-20000Hz,所以每采一个数,要有一段延迟的时间。我想通过执行空循环来延迟,但是本人不清楚执行多少次空循环来延迟。所以想请教老师解答如何根据计算机的速度来确定延时循环次数?本人机器为pentium3,550。最好能有个例子!
你个人的水平 : 刚入门
答:
下面是一个简单的演示程序:
void main()
{
long i;
long t = timeGetTime();
for(i = 1; i < 1e6; i++);
t = timeGetTime() - t;
printf("1,000,000times = %dms\t 0.5ms = %10.0ftimes\n", t, 1e6*0.5.0/t);
}
这里,我进行了1,000,000次空循环。由于每次空循环的时间都非常短,而timeGetTime的最大精度不超过1ms,所以进行循环的次数要多才能测得比较准。我在P3 550下测试,大约需要16ms,假设0.5ms延时大约31250个空循环。这个结果仍然是比较粗糙的。另外,可以参考QA004842 "timeGetTime函数延时不准",这个例子使用的是QueryPerformanceCounter函数。
相关问题:
QA001813 "如何在Windows实现准确的定时"
QA004842 "timeGetTime函数延时不准"
此问题由李海回答。
附加关键字:编程, 源程序, programming, source code, C/C++, MFC, C++ Builder, Borland C++, Turbo C, C, BCB, DDK与硬件设备, hardware, ddk, vtoolsd, driver studio, winrt。
|