Controler la vitesse d'un thread?!

gaudetm Messages postés 44 Date d'inscription mercredi 23 juillet 2003 Statut Membre Dernière intervention 13 décembre 2004 - 13 déc. 2004 à 12:04
gaudetm Messages postés 44 Date d'inscription mercredi 23 juillet 2003 Statut Membre Dernière intervention 13 décembre 2004 - 13 déc. 2004 à 16:28
Bonjour à tous,

voila mon probleme, je souhaite controler la vitesse d'un thread (ou plusieurs) par contre je ne trouve pas une documentation concernant ce sujet.

les procedures de ralentissement sous delphi (comme sleep ou sleepEx) acceptent une valeur minimale de 1ms, et une pause de cette valeur pour un thread le ralentie enormement.

ce que je veux savoir c'est s'il ya un moyen de ralentir un thread, donc au lieu d'utiliser à 100% les ressources systemes, est-ce que je peux le ralentir pour utiliser 50% par exemple?

l'environnement dans lequel je parle se base sur un emulateur que j'ai developpé, (emulation des processeurs 6502 8bits)
normallement ces processeurs tournent de 1 à 2Mhz.
par contre mon emulateur lui tourne à 55Mhz sur un intel 2Ghz (au niveau de l'emulateur)

j'ai besoin de ralentir le thread principale qui fait toute l'emulation, pour qu'il n'utilise plus 100% des ressources systemes, car ça me cause quelques problemes pour les connexions TCP/IP (ralentissement à ce niveau là)

merci d'avance

-( /"|"\AR|Ø )-

7 réponses

jmp77 Messages postés 1119 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 4 octobre 2006 7
13 déc. 2004 à 12:58
Alors j'ai un lien a te proposer mais c'est du java mais la logique devrait t'aider je pense :

http://www.uqac.ca/~pguerin/8pro101/NotesDeCours6.doc

Bonne prog,
JMP77.

N'oubliez pas de cliquer sur réponse acceptée.
0
gaudetm Messages postés 44 Date d'inscription mercredi 23 juillet 2003 Statut Membre Dernière intervention 13 décembre 2004
13 déc. 2004 à 13:48
@jmp77

merci pour ta doc (j'ai programmé 3 ans en java)

mais malheureusement le probleme est pareil peu importe le language
toutes les procedures de pause ou sleep fonctionnent en millisecondes, or faire un suspend pour thread en milliseconde le rend très lent (et devient aussi lent qu'en timer normal sous delphi)

je cherche en fait un moyen de controler la vitesse de mon thread au niveau de l'horloge du CPU et pas l'horloge humaine!
donc je cherche à le controler au niveau microseconde et pas milliseconde

merci encore

-( /"|"\AR|Ø )-
0
jmp77 Messages postés 1119 Date d'inscription lundi 4 février 2002 Statut Membre Dernière intervention 4 octobre 2006 7
13 déc. 2004 à 13:51
Ok j'ai bien compris ton problème mais désolé je ne peux pas t'aider.

Bonne prog,
JMP77.

N'oubliez pas de cliquer sur réponse acceptée.
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
13 déc. 2004 à 14:12
Si ça peut t'aider, sous Windows il y a SetThreadPriority() pour abaisser ou relever le niveau de plannification systeme du thread.

ciao...
BruNews, MVP VC++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
gaudetm Messages postés 44 Date d'inscription mercredi 23 juillet 2003 Statut Membre Dernière intervention 13 décembre 2004
13 déc. 2004 à 14:22
@BruNews

je sais, et ça n'existe que sous NT
mais ça ne va pas m'aider, car le thread il est toujours hors control!

j'ai essayé de voir des docs concernant les emulateurs, mais ils expliquent comment faire un emulateur sans parler des threads lol

en fait le probleme avec la priorité c'est le NMI (NonMaskable Interrupt)
le NMI ds mon emulateur doit s'auto ajuster pour garder l'affichage correct (sinon y'aura des haut et des bas dans la vitesse du programme emulé)
si le joue avec les priorité du thread, ça me cause des variations brusques dans la vitesse d'affichage (la vitesse de modifs dans la memoire et pas au nivo graphique, mais à cause de ça le graphique devient rapide: une consequence)

:(

-( /"|"\AR|Ø )-
0
ni69 Messages postés 1418 Date d'inscription samedi 12 juin 2004 Statut Membre Dernière intervention 5 juillet 2010 12
13 déc. 2004 à 15:45
Sous NT, tu pourrais essayer de te servir de la fonction :
GetThreadTimes(hThread: THandle ; var lpCreationTime, lpExitTime, lpKernelTime, lpUserTime: TFileTime) : BOOL; stdcall

lpCreationTime : Moment de la création de l'exétron
lpExitTime : Moment de la fin de l'exétron (indéfini si il fonctionne encore)
lpKernelTime : Quantité de temps passé par l'exétron à s'exécuter en mode système
lpUserTime : Quantité de temps passé par l'exétron à s'exécuter en mode application

Par contre, je ne pourrais pas t'en dire plus sur ton problème... :sad)

@+
Bonne Prog'
Nico

N'oubliez pas de cliquer sur Réponse acceptée lorsque la réponse vous convient ! :)
0
gaudetm Messages postés 44 Date d'inscription mercredi 23 juillet 2003 Statut Membre Dernière intervention 13 décembre 2004
13 déc. 2004 à 16:28
@ni69

merci pour cette info
je vais regarder de ce point de vue, et tester les valeurs recuperés au temps t et (t+1) en faisant la difference

si ça se trouve c'est ce que je cherche, mais ça demande des recherches plus avancés

je cloture ce sujet sur le forum en fonction de mes resultats

merci @ tous

-( /"|"\AR|Ø )-
0
Rejoignez-nous