软件注册站
热情软件屋

 
如何根据计算机的速度不同,确定延时循环次数
编号: QA002554    
建立日期: 2000年2月11日 最后修改日期: 2004年8月25日
所属类别: C/C++ - DDK与硬件设备
   
    操作系统:win98
    编程工具:vtoolsd2.03 Vc5.0
    问题:我在制作DMA采集驱动程序,由于24位A/D特性,DMA传输要滞后开始采样一段时间,现用循环语句解决,但是换计算机后,由于计算机速度不同,又要改循环次数,请问专家怎样解决?谢谢!!!(zjw)
   
    你可以在程序启动时先运行一个循环,比如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

   
 
把这个问题推荐给朋友
   
 
   
您的意见类别
您的名字
您的电子邮件
您的建议(请尽可能详细)
 
 

版权所有 1997-2008 热情软件屋
如果您有任何建议和意见, 请给我发个电子邮件 askpro@china-askpro.com
Web Designed by ZebraStudio