none
Urgent : Fonction Sleep(0)-> cpu 50% RRS feed

  • Question

  • Bonjour,

    j'ai un problème sur une application crée sous VC++ qui tourne sur un server OS: windows 2003 server avec une architecture de processeur multicore.

    La lib utilisée est wxWidget.

     

     

    Mon problème étant que je dois réaliser un timer très précis à 50ms.

    quand ce timer claque toutes les 50 ms je poste un jeton.

    Bref entre ce temps d'attente je dois relâcher la main au système et pour cela j'utilise Sleep(0).

    Tout ce passe pour le mieux sauf que mon cpu est à 50% et à la longue cela va écourter la vie du processeur.

    (Je suppose selon les tutos sur Sleep que cette fonction relâche la main et n'ayant pas de thread plus prioritaire elle retourne immédiatement à sa tâche).

    Je dois donc palier à ça mais je n'ai plus d'idée sur l'alternative à donner à la fonction Sleep.

    J'ai essayer Sleep(1) mais le timer n'est plus aussi précis.

    SleepEx(0,true) descendre le CPU à 46% mais c'est pas encore assez.

    ci joint mon extrait de code.

    wxStopWatch sw;

        // Returns true if the thread was asked to terminate: this function should
        // be called by the thread from time to time, otherwise the main thread
        // will be left forever in Delete()!
        while(!TestDestroy()){
            if (sw.Time() >=  (long)TIMER_VALUE){
                //si au moins 50ms se sont écoulées depuis le dernier test on
                //remet le stopwatch à 0 et on autorise le dépîlement
                sw.Start(0);
                m_poSemaphore->Post();
               
            }else{
                //si 50 ms ne se sont pas écoulées, on attent
                Sleep(0);
            }           
        }

    D'avance merci.

    zouz

     

     

     

     

     

     

    jeudi 24 juin 2010 08:23

Réponses

Toutes les réponses