2010-03-31 4 views
2

Je suis novice en ce qui concerne le concept de threading en C, j'ai donc du mal à implémenter ce dans ma fonction. J'ai une application simple dans laquelle je veux afficher une barre de progression à un endroit particulier . Dans une fonction particulière, je vais lire des fichiers (dans une boucle for) pour certaines manipulations (concernant mon application). Pendant la lecture des fichiers, je souhaite afficher une barre de progression, indiquant qu'elle est en cours de lecture des fichiers. Je sais que cela devrait être fait en utilisant le concept du filetage, mais je ne suis pas sûr de savoir comment le faire.Implémentation du contrôle de progression à l'aide de threads

Répondre

4

Créer un thread de travail dans le programme principal et définir la routine de rappel qui effectue le traitement de fichier.
Cette routine calculera également le pourcentage qui est complété. Chaque fois que ce pourcentage change, postez la valeur
sous la forme d'un message de fenêtre que le thread principal va attraper et mettre à jour le contrôle de la barre de progression. Vous pouvez définir des messages internes d'application comme #define MSG_PROGRESS_VALUE (WM_USER + 1).

Edit: échantillon,

#define MSG_PROGRESS_VALUE (WM_USER + 1) 
#define MSG_WORKER_DONE (WM_USER + 2) 
... 
DWORD WINAPI jobroutine(LPVOID lpParameter) { 
    while (TRUE) { 
     // process files ... 
     // calculate new percent 
     if (newpercent != oldpercent) { 
     PostMessage(mainwnd, MSG_PROGRESS_VALUE, 0, newpercent); 
     oldpercent = newpercent; 
     } 
     ... 
    } 
    PostMessage(mainwnd, MSG_WORKER_DONE, 0, 0); 
    return 0; 
} 
... 
MainWndProc(...) { 
    switch (uMsg) { 
    ... 
    case MSG_PROGRESS_VALUE: 
    // update progress bar value (lParam) 
    break; 
... 
} 
... 
WinMain(...) { 
    HANDLE worker = CreateThread(NULL, 0, jobroutine, NULL, NULL, NULL); 
    ... 
    // Start classic windows message loop 
    ... 
} 
+0

nick thanx 4 ur replay..I apprécie beaucoup ... si vous pouvez me montrer un exemple ou toute référence concernant la above..it serait très utile nick – kiddo

+0

@Rakesh, j'ai posté un échantillon pour avoir une idée du processus. –

Questions connexes