作者:shadow | 来源:互联网 | 2024-11-18 19:12
最近有人询问我,“小兵以太网测试仪”这款软件是如何精确控制发包频率的。考虑到这个问题具有一定的普遍性,我决定撰写一篇文章来详细解答。
在Windows操作系统中,当程序设定的定时器时间到达时,系统会向程序发送一个WM_TIMER消息。然而,根据《Windows程序设计》一书的描述(第8章),Windows的定时器存在一些固有的缺陷:
1. **精度不足**:在Windows 98中,定时器的最小分辨率大约为55毫秒,而在Windows NT中则约为10毫秒。
2. **消息处理延迟**:WM_TIMER消息与其它消息一样,存放在消息队列中。如果程序处理其他消息的时间过长,就会导致WM_TIMER消息的处理延迟,从而影响定时器的准确性。
3. **消息丢失**:在某些情况下,WM_TIMER消息可能会被遗漏,进一步降低定时器的可靠性。
对于需要高精度定时的应用,如网络测试工具,上述问题显然是不可接受的。为了克服这些缺陷,“小兵以太网测试仪”采用了以下方法:
```c
interval = x; // 所需的时间间隔
next_do_work_time = 当前时间;
while (!need_stop)
{
do
{
cur_time = 当前时间;
} while (!need_stop && cur_time