Prise contrôle

Signaler
Messages postés
11
Date d'inscription
jeudi 12 janvier 2006
Statut
Membre
Dernière intervention
20 décembre 2008
-
Messages postés
11
Date d'inscription
jeudi 12 janvier 2006
Statut
Membre
Dernière intervention
20 décembre 2008
-
Bjer à tous. Je développe en C++ pas mal de programmes de calcul qui consomment énormément de temps CPU. Lorsque je lance l'un d'eux, XP ne peut pas reprendre la main avant leur achèvement complet. Que dois-je modifier pour que mes programmes tout en tournant autorisent d'autres à tourner également ?

3 réponses

Messages postés
1115
Date d'inscription
mercredi 15 juin 2011
Statut
Membre
Dernière intervention
6 mai 2021
4
Salut,

J'étais sur un projet sur lequel on utilisait des algo en traitement du signal, ça prennait 100% de CPU, mais le PC n'était pas figé.

La 1ere idée serait de changer la priorité du thread de calcul de ton programme : SetThreadPriority.
Messages postés
3874
Date d'inscription
mardi 8 mars 2005
Statut
Modérateur
Dernière intervention
7 novembre 2014
14
Salut,

Sleep permet de bloquer l'exécution d'un thread pour une certaine durée. Si tu mets des Sleep(1) un peu de partout (Dans les boucles, pour qu'elle soit appelée à chaque tour, tu peux libérer le processeur pour les autres threads).

Forcément, ton programme sera plus long : tu perds au moins une milliseconde de temps CPU... Mais justement la CPU ne sera pas scotché, et tu peux te retrouver avec une consommation CPU intéressante, genre 10% ou autre : tout dépend de la fréquence d'appel.

Un compromis est d'appeler Sleep(0). Cela demande à Windows de regarder si un autre thread ne voudrait pas un peu de temps CPU. "Allez y les gars c'est votre tour".
Messages postés
11
Date d'inscription
jeudi 12 janvier 2006
Statut
Membre
Dernière intervention
20 décembre 2008

Merci infiniment pour vos conseils.