Solved

sleep(1) - how long does it treally take?

Posted on 2001-07-19
18
341 Views
Last Modified: 2013-12-03
Working on NT 4 (embedded version if it makes a difference), I know this is not a real time system, but I wonder how close I can get.

In the team we are debating whether sleep(1) really returns after 1 ms - some say it is more likely to return after 10 ms, and that it is not predictable at all.  

To summarize: what is the best way to write a thread that is not in highest priority, and has to wait for exactly 1 ms (or as close as possible) in between doing some work.
0
Comment
Question by:yossikally
  • 5
  • 3
  • 2
  • +4
18 Comments
 
LVL 15

Expert Comment

by:NickRepin
ID: 6297514
>>: what is the best way to write a thread that is not in highest priority

Use SetPriorityClass() and SetThreadPriority()

>>and has to wait for exactly 1 ms

It is not possible in principle. A time slice for a thread is ~20 msec.
0
 
LVL 15

Expert Comment

by:NickRepin
ID: 6297517
From MSDN library:

<<Multitasking

....

The length of the time slice depends on the operating system and the processor. Because each time slice is small (approximately 20 milliseconds), ....>>
0
 
LVL 15

Expert Comment

by:NickRepin
ID: 6297530
>>some say it is more likely
to return after 10 ms, and that it is not predictable at all.  

That's true.
0
 

Author Comment

by:yossikally
ID: 6297550
... So why is it possible at all to call sleep(1), is it just MS being somewhat misleading??
0
 
LVL 10

Expert Comment

by:makerp
ID: 6298550
the sleep(mil) API says that the caller will sleep for ATLEAST mil time not less than. therefore microsoft are not misleading
0
 

Author Comment

by:yossikally
ID: 6299407
... well they could as well tell you to that the parameter is in nano seconds, and not be misleading.  Has anyone used multimedia timers?  Someone told me they can help you get the cpu faster
0
 
LVL 8

Expert Comment

by:mxjijo
ID: 6299657
yossikally ,

I've done some experiments on Mutimedia timers. Yes it is more accurate when it is periodic. Meaning- if you're asking for 100ms period, the standard NT timer (SetTimer) won't give you better accuracy. But it appeared to me like the multimedia timer algorithm constently evaluate/correct the timer frequency, so that the application get a "better" timer ticks on avarage.

But I dont think it applies to yossikally's question. If you need smaller/accurate timers, you might need to use the profiling method.
0
Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

 
LVL 5

Accepted Solution

by:
robpitt earned 50 total points
ID: 6302818
I don't think there is a way to sleep for exactly 1ms.

If you must wait for 1ms exactly you have little choice but burn cpu cycles in a loop until the time has ellapsed.

However I doubt you really need to do this - what is the task at hand anyway?

Rob
0
 
LVL 15

Assisted Solution

by:NickRepin
NickRepin earned 50 total points
ID: 6303718
>>If you must wait for 1ms exactly you have little choice but burn cpu cycles in a loop until the time
has ellapsed.

While this loop you can be suspended for some time to let other threads go.
0
 
LVL 7

Expert Comment

by:peterchen092700
ID: 6304338
yossikally: what's your actual Q?

a) does Sleep(1) sleep exactly 1 ms ? (A:No)
b) How can I sleep for exactly 1 ms ? (A:not guaranteed, but robpitt is closest)
c) Is Windows a real-time OS (A:No)
d) Can I rely on *any* timing in Windows (A: No)

0
 

Author Comment

by:yossikally
ID: 6305683
my question is not if i can do it.  I understand I can't, but how close i can get.  Given several options (sleep(1), sleep(0) inside a loop, SetWaitableTimer, Set MultimediaTimer, etc.) what is the one that would get me closest to resume operation after exactly 1 ms.?

The application is in the digital video area over network, and more specifically - ensuring 'smooth' flow of data over the network. Tha's why I need short intervals in between sending packets.  Still, it has to be guaranteed.
0
 
LVL 15

Expert Comment

by:NickRepin
ID: 6305715
>>Given several options
(sleep(1), sleep(0) inside a loop, SetWaitableTimer, Set MultimediaTimer, etc.) what is the one that
would get me closest to resume operation after exactly 1 ms.?

Does not matter. It makes no sense to talk about "exactly 1 ms" in the Windows environment. Use sleep(0) or sleep(1) as the easiest way.
0
 
LVL 7

Expert Comment

by:peterchen092700
ID: 6305840
Well, Nick, sometimes "closer" is better than "easier".
From all what I learnt, using multimedia timers will give you best results.

0
 
LVL 5

Expert Comment

by:robpitt
ID: 6305912
A multimedia timer (TimeSetEvent) is just another schedduled thread so it too can be late.


Anyway, re:
   "The application is in the digital video area over
    network, and more specifically - ensuring 'smooth'
    flow of data over the network. Tha's why I need
    short intervals in between sending packets.  Still,
    it has to be guaranteed"

I'm not sure that trying to spit out a particular amount of data every 1ms will ever work on windows. Thats really only practicle on a real time system.

Is it not possible to introduce buffering?
0
 
LVL 5

Expert Comment

by:drnick
ID: 7497646
since the system clocks don't go more precise than >10ms, and the rest (thread switching and so on) is probably determined by instruction/clock tick averages, i doubt that there's any way to get 1ms precise except by doing a performance check to the system at the startup of you prog determining the loop-count needed for a, may be asm @loop: nop loop @loop. but remember, that's also the cause of the division by zero in older games, so i guess you should do something intelligent at the startups performance test.
0

Featured Post

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
Build VS2015 project in bat command 3 80
What is MicroStrategy.NET? 2 58
Using MS Code on my Mac 6 66
Is IHttpActionResult a promise pattern? 2 59
A theme is a collection of property settings that allow you to define the look of pages and controls, and then apply the look consistently across pages in an application. Themes can be made up of a set of elements: skins, style sheets, images, and o…
Entering time in Microsoft Access can be difficult. An input mask often bothers users more than helping them and won't catch all typing errors. This article shows how to create a textbox for 24-hour time input with full validation politely catching …
This tutorial gives a high-level tour of the interface of Marketo (a marketing automation tool to help businesses track and engage prospective customers and drive them to purchase). You will see the main areas including Marketing Activities, Design …
This is Part 3 in a 3-part series on Experts Exchange to discuss error handling in VBA code written for Excel. Part 1 of this series discussed basic error handling code using VBA. http://www.experts-exchange.com/videos/1478/Excel-Error-Handlin…

862 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

24 Experts available now in Live!

Get 1:1 Help Now