Prise contrôle

Ravaner Messages postés 11 Date d'inscription jeudi 12 janvier 2006 Statut Membre Dernière intervention 20 décembre 2008 - 19 déc. 2008 à 10:54
Ravaner Messages postés 11 Date d'inscription jeudi 12 janvier 2006 Statut Membre Dernière intervention 20 décembre 2008 - 20 déc. 2008 à 08:44
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

fregolo52 Messages postés 1114 Date d'inscription mercredi 15 juin 2011 Statut Membre Dernière intervention 6 mai 2021 4
19 déc. 2008 à 11:00
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.
0
cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
19 déc. 2008 à 15:04
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".
0
Ravaner Messages postés 11 Date d'inscription jeudi 12 janvier 2006 Statut Membre Dernière intervention 20 décembre 2008
20 déc. 2008 à 08:44
Merci infiniment pour vos conseils.
0
Rejoignez-nous