<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Tue, Jul 26, 2016 at 12:38 PM, James Richters <span dir="ltr"><<a href="mailto:james@productionautomation.net" target="_blank">james@productionautomation.net</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div lang="EN-US"><div><p class="gmail-MsoNormal"><span style="font-size:11pt;font-family:"calibri",sans-serif">What I need is a timer that I can specify in microseconds, a millisecond is too long.   I am using it for timing to read in a string on a serial connection.  My fastest baudrate is 250000, so at that rate I would need to delay only 36 microseconds.  So I can’t use sleep () or delay () because they only go down to 1mS and that’s too slow.</span></p></div></div></blockquote><div><br></div><div>Here's an example of Sleep with microseconds that I came up with <br></div><div><br>procedure SleepMcs(mcs: Int64);<br>var<br>  ct : TLargeInteger;<br>  fr : TLargeInteger;<br>  af  : TLargeInteger;<br>  trg : TLargeInteger;<br>const<br>  NanoInMicro = 1000;<br>begin<br>  QueryPerformanceCounter(ct);<br>  QueryPerformanceFrequency(fr);<br>  trg:=round(mcs * NanoInMicro / (NSInSec/fr));<br>  repeat<br>    QueryPerformanceCounter(af);<br>  until trg<=(af-ct);<br>end;<br><br>I'm hoping that there's a better solution out there, because this procedure will end up with 100% CPU load.<br></div><div>I doubt it's possible to unload the CPU, since the windows scheduler is in milliseconds accuracy.<br></div><div>May be a lower (kernel/driver) level allows that.<br></div><div></div><div><br></div><div>thanks,<br></div><div>Dmitry <br></div></div><br></div></div>