记得qt example里面有个电子钟程序。在它的基础上改写成了一个倒数计时器。
普通的实现方法:一个secTimer每隔1s发送一个signal,对应的slot负责把计数-1刷新。
还有一个singleshot的globalTimer直到时间全部走完发一个signal,让前面的timer停止工作。
预定时间是10s的话,就设置globalTimer->start(10*1000);
程序运行后能正常倒计时输出。但最终会停在0:01静止。
最后一个secTimer的signal没有被发出。
在同一时刻,不同的signal之间发送的先后次序是不确定的。
那么推想原因,可能是在整10s的同一时刻下,globalTimer率先发送信号让secTimer停掉,
使得secTimer来不及发最后一个signal。但是如果让globalTimer->start(10*1000+5),
故意让globalTimer延迟的话,在本人的1.7GHz, 512M机器上仍然是停在0:01。
这似乎提示了某种延迟的存在(且延迟>=5ms)。
后来通过试行错误逐渐延长globalTimer的时间,终于在+50ms得到了0:00。