Re: question about thread scheduling



Zhiqiang,

You should try to tell us *exactly* what you want to do.
You should also avoid multiplying the discussion threads if you want people
to take care of you from the beginning.
If I understood what you want to do, you have implemented a polling loop to
do some job (what kind of job?) every 4ms.
You have put this loop in a high-priority thread started by the XXX_Init
function of a stream driver.
You are using CE 6.0 on a CEPC.

The loop should thus look like:

while (!g_bSuicide)
{
Sleep(3);
<do some job>
}

There is no reason that such a loop exits except when g_bSuicide is set to
TRUE (something that can be done in XXX_Deinit) or the <do some job> code
executes a break of goto intruction.

Now, why Sleep(3) instead of Sleep(4)? Because Sleep(3) will sleep for *at
least* 3 ms and because Sleep is synchonized on timer ticks, that fire every
ms (producing the SYSINTR_RESCHED you are focusing on.) So, Sleep(3) returns
from sleeping right after the third tick and a new 1ms slice begins. You <do
some job> during a portion of this slice and reenter Sleep(3). Sleep(3) puts
your thread to sleep for 3 timer ticks and that means the time remaining in
the current tick + 3 ms.

HTH
Remi


.



Relevant Pages

  • Re: question about thread scheduling
    ... I doubt you will need to mess with the system tick to get what ... I will try what you suggested, the reason that I didn't use the sleep ... If the NN run in a different thread as the control loop ... Sleepputs your thread to sleep for 3 timer ticks and ...
    (microsoft.public.windowsce.platbuilder)
  • Re: question about thread scheduling
    ... I will try what you suggested, the reason that I didn't use the sleep method ... If the NN run in a different thread as the control loop ... Sleepputs your thread to sleep for 3 timer ticks and ...
    (microsoft.public.windowsce.platbuilder)
  • Re: question about thread scheduling
    ... afraid that I can not use any sleep function to kill the precious CPU ... If the NN run in a different thread as the control loop ... least* 3 ms and because Sleep is synchonized on timer ticks, ...
    (microsoft.public.windowsce.platbuilder)
  • Re: question about thread scheduling
    ... If the solution with Sleep, SleepTillTick and GetTickCount does not work for you and you are using normal CEPC, you can also take a look at http://msdn2.microsoft.com/en-us/library/ms836797.aspx which is an old technical article, but will give you a good idea on how to achieve what you want. ... I doubt you will need to mess with the system tick to get what you want though. ... If the NN run in a different thread as the control loop ... Sleepputs your thread to sleep for 3 timer ticks and ...
    (microsoft.public.windowsce.platbuilder)
  • Re: question about thread scheduling
    ... If the NN run in a different thread as the control loop ... Because Sleep(3) will sleep for *at ... least* 3 ms and because Sleep is synchonized on timer ticks, ...
    (microsoft.public.windowsce.platbuilder)