• 4561阅读
  • 5回复

如果实现限时循环 [复制链接]

上一主题 下一主题
离线tumblm
 
只看楼主 倒序阅读 楼主  发表于: 2009-06-16
我打算设立一个循环,10ms是循环周期,里面运行了很多函数,每次内部函数运行的时间少于10ms,但是循环必须等到10ms才能结束

感觉不太好实现啊
离线jorneyr

只看该作者 1楼 发表于: 2009-06-16
伪代码
while(!stopped) {
        startTime = getTime(...);
        functions()....
        endTime = getTime(...);
        
        elapsedTime = endTime - startTime;
        if (elaspedTime < 10) {
               sleep(10 - elapsed);
        }
}
离线xymail110
只看该作者 2楼 发表于: 2009-06-17
用定时器啊,试过没有?

QTimer *ptimer;

ptimer = new QTimer();
ptimer->start(10);

connect(ptimer, SIGNAL(timeout()), this, SLOT(func()));

func()
{

}

大致就是这样了,应该没问题。
学无止境
离线yangyunzhao

只看该作者 3楼 发表于: 2009-06-18
引用楼主tumblm于2009-06-16 17:39发表的 如果实现限时循环 :
我打算设立一个循环,10ms是循环周期,里面运行了很多函数,每次内部函数运行的时间少于10ms,但是循环必须等到10ms才能结束
感觉不太好实现啊

10毫秒?根本不可能,没有那么快的机器。
你用定时器看似可以,但一个定时器的信号从发出到处理要22毫秒以上,你怎么办?
10毫秒你能做什么事情啊?莫非是大型机?一般机器,可能CPU刚刚得到,又要释放了。或者时间全部用在调度,也就是启动停止上了。
离线xymail110
只看该作者 4楼 发表于: 2009-06-29
10毫秒?根本不可能,没有那么快的机器。
你用定时器看似可以,但一个定时器的信号从发出到处理要22毫秒以上,你怎么办?
10毫秒你能做什么事情啊?莫非是大型机?一般机器,可能CPU刚刚得到,又要释放了。或者时间全部用在调度,也就是启动停止上了。

-----------------------------------------


定时器的信号从发出到处理要22毫秒以上?这是QT的限制么?还是跟机器有关?
学无止境
离线xymail110
只看该作者 5楼 发表于: 2009-06-29
回3楼的兄弟,这是我查QT的帮助文档,关于QTimer的discription:

        Note that QTimer's accuracy depends on the underlying operating system and hardware. Most platforms supports an accuracy of 1 millisecond, but Windows 98 supports only 55. ......

应该说QTimer 的精度应该是可以实现10毫秒的限时循环的吧,如果不行那就是跟操作系统和硬件有关了。
学无止境
快速回复
限100 字节
 
上一个 下一个