Author: Tony Werten
Date: 08:09:46 12/01/03
Go up one level in this thread
On December 01, 2003 at 10:51:40, Robert Hyatt wrote: >On December 01, 2003 at 04:23:56, Tony Werten wrote: > >>On December 01, 2003 at 03:39:27, Russell Reagan wrote: >> >>>On December 01, 2003 at 02:41:28, Tony Werten wrote: >>> >>>>When my masterthread is spinning, waiting for results from it's workers threads, >>>>how do I keep it from burning CPU time ? >>>> >>>>The apifunction sleep() doesn't some threadsafe, suspending the thread and >>>>having it resumed by the worker seems overly complicated. ( Accept maybe if I >>>>can use a callback function ) >>>> >>>>Any thoughts ? >>> >>>What language are you using? >>> >>>The Sleep() Win32 API call might be a dirty solution. IIRC, the Sleep() function >>>puts the calling thread to sleep for a specified number of milliseconds, so that >>>thread shouldn't run during that time. I think Sleep() is different from >>>sleep(). Also check out SleepEx(). It can do some extra things that might help >>>you out. >> >>I think that'll be my first try. Something like: >> >>no_results:=true; >> >>while no_results do sleep(100,true) > >I hate to sound like this, but that is so incredibly ugly that it doesn't >pass muster for a solution in an entry-level threading course. You _never_ >wait for some fixed period of time. Why have that processor idle when there >is something useful to be done? Suppose work arrives _immediately_ after >you start the sleep. You sit. > >In threads, you _never_ use "time" in this way. If you need to wait for >N seconds, then wait for N seconds. But don't wait for a period of time >when you really want to wait for a specific event to be posted. :) It should have read sleepEX(100,true) I just used the 100 as an example. It's the "true" that enables the callbackfunction to interupt the sleepEX. Tony > > >> >> >>procedure some_results; // callback function >>begin >> no_results:=false; >>end; >> >>Let's see if this remains hidden in the profiler list. I'll probably need to add >>some criticalsections to. >> >>Thanks, >> > >It'll remain hidden, but it will waste time every time you get there. You >will just be sleeping a lot rather than executing. > >>Tony >> >>> >>>If you want to do it the "right" way, then you should probably use >>>WaitForSingleObject() or WaitForMultipleObjects(), both Win32 API functions. I >>>think these will only work if you use the Win32 threading stuff though. It's >>>been a while since I've used them, but I think those functions will wait on any >>>Windows handle (events, threads, files, etc.). >>> >>>If you use a different third party threading library and it doesn't provide this >>>functionality, Sleep() might be a good solution. >>> >>>You might have a look at these: >>> >>>Process and Thread Functions (Sleep/SleepEx, among other interesting functions) >>>http://msdn.microsoft.com/library/en-us/dllproc/base/process_and_thread_functions.asp >>> >>>Synchronization Functions (WaitFor*, among other interesting functions) >>>http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/waitforsingleobject.asp
This page took 0 seconds to execute
Last modified: Thu, 15 Apr 21 08:11:13 -0700
Current Computer Chess Club Forums at Talkchess. This site by Sean Mintz.