A friend asked me, "Creep Ethernet tester" This software, how to control the frequency of the contract.
I think, simply write an article to talk about the problem.
Windows will send a WM_TIMER message to the program every time a program sets a timer.
According to a description of the famous Windows Programming book, "Windows Programming" (in the 8th chapter),
We know that the Windows timer has the following drawbacks:
1. Not High accuracy
Windows98 is probably 55ms,windows NT is probably 10ms.
2. Wm_timer messages may not be processed in a timely manner
Wm_timer messages, like other messages, are stored in a normal message queue. If the program handles other messages, it takes a long time to delay the processing of the WM_TIMER message, which is equivalent to the timer coming late from the effect.
3. Wm_timer messages may be missing
So, what if a Windows program has a tough time-critical requirement (for example, software like a tester)?
The "Creep Ethernet tester" uses the following stupid method.
This method is very simple, but it does work. The following is the pseudo-code for this method.
Interval=x; The time interval that is required
Next_do_work_time= current time;
while (!need_stop)
{
Do
{
Cur_time= current time;
} while (!need_stop && cur_time<next_do_work_time);
if (need_stop) break;
Do_work ();
Next_do_work_time+=interval;
}
It is important to note that this method is CPU-intensive:)
How Windows programs achieve precise timing