Le THREAD

THREAD : Un process comporte au moins un thread principal plus d'autres optionnels qu'il peut créer. Les Threads s'exécutent en parallèle. Tous les threads d'un processus accèdent directement aux données de celui-ci.

Sur un P.C. mono processeur, un seul thread s'exécute à la fois. NT choisit le thread actif sans considérer le process auquel il appartient.

En principe la priorité du thread se choisit dans une fourchette relative autour de la classe de priorité de son process :

bulletTHREAD_PRIORITY_LOWEST,
bulletTHREAD_PRIORITY_BELOW_NORMAL,
bulletTHREAD_PRIORITY_NORMAL,
bulletTHREAD_PRIORITY_ABOVE_NORMAL,
bulletTHREAD_PRIORITY_HIGHEST

La dernière priorité est un peu spéciale car elle prend la valeur 31 si le process est temps réel et 15 sinon.

bulletTHREAD_PRIORITY_CRITICAL.

Seul ces cinq priorités appliquées dans le contexte d'un PROCESS temps réel garantit que le thread activable de plus forte priorité est activé. Pour les autres niveaux (sur 32) NT fait varier dynamiquement les priorités pour améliorer les performances du système

Sous C++ Builder, un thread se crée par _beginThread, variantes dérivées de l'API WIN32 mais qui permettent aux threads d'utiliser la bibliothèque de C++ builder.

ex : g_hThread = (void *)_beginthread(ThreadWaitable, 0, NULL);

avec :

void ThreadWaitable (LPVOID lpThreadParameter)
{   for(;;) }

Le Thread peut être supprimé de l'extérieur par TerminateThread.

Sa priorité se positionne par: SetThreadPriority(g_hThread, Priorite);

Prototypes :

bulletunsigned long _beginthread(_USERENTRY (*start_address)(void *), unsigned stack_size, void *arglist)
bulletBOOL SetThreadPriority(
HANDLE hThread,    // handle to the thread
int nPriority     // thread priority level
);
bulletBOOL TerminateThread(
HANDLE hThread,    // handle to the thread
DWORD dwExitCode     // exit code for the thread
);
bullet  

 

 

Accueil ] Remonter ]