2

I hope someone could help me with this (And english is not my native language so I'm sorry in advance for any grammar or spelling mistakes):

As part of a project I'm coding, I need to time some commands. More specifically: I have 2 sets of commands (Lets call them set A and set B) - I need to to execute set A, then wait for a specific number of milliseconds (calculated in set A), then execute set B. I did it using the Sleep(time) command between the sets.

Now, I need to incorporate another set of commands (Set C) that will run in a loop in the time between the sets A and B instead of simply doing nothing. Meaning, instead of the time the program was idle before (waiting the specified number of milliseconds) I need it to loop the C set - but the catch is that it has to loop C exactly the same time it would have waited in the idle time.

How can I do this without using threads? (And generally keep it as simple as possible)

Mark Garcia
  • 17,424
  • 4
  • 58
  • 94
TeaHoney
  • 150
  • 11

1 Answers1

1

I guess the "work-time" for the set of commands in C is known. And C is a loop which can/shall finish when the wait time has expired.

In this case I'd suggest to use a performance counter to count down the wait time. Depending on what is calculated and what overhaed is introduced in C the accuracy to obtain can be in the microseconds range.

Pseudo code:

Delay = 1000
Do A
CounterBegin = GetCounter()
// and now the C loop
while ((GetCounter() - CounterBegin) < Delay) {
   Do C
}
Do B

Note: The counter values are to be converted into times by using the counter frequency. See the link above to get the details.

Community
  • 1
  • 1
Arno
  • 4,994
  • 3
  • 39
  • 63