Page 1 sur 1

Thread perturbateur

Publié : mer. 05/sept./2012 9:18
par SPH
Salut,

je souligne ici comment un thread peut brouiller une routine.
En effet, alors que je demande d'ecrire en vert, le thread force parfois la couleur en violet :

Code : Tout sélectionner

OpenConsole()
EnableGraphicalConsole(1)

;+++++++++++++++++++++++++++++++++++++++++++++++++++
;+++++++++++++++++++++++++++++++++++++++++++++++++++
Procedure NetworkThread(i)
  Repeat
  ConsoleColor(5,0)
  Delay(i)
  ForEver
EndProcedure
;+++++++++++++++++++++++++++++++++++++++++++++++++++
;+++++++++++++++++++++++++++++++++++++++++++++++++++


CreateThread(@NetworkThread(), 2)
                
For i=1 To 100
  ConsoleColor(10,0)
  PrintN("0")
  Delay(1)
Next

Repeat
ForEver
Ce type de perturbation est il inevitable ? (si "perturbation" il y a , vous allez me dire)

Re: Thread perturbateur

Publié : mer. 05/sept./2012 10:06
par Ar-S
Le thread ne force rien du tout.
Voilà ce que tu fais...

Tu dis à ton logiciel d'écrire en vert toutes les x millisecondes
Tu lui dis qu'en "parallèle", il doit écrire en violet au même endroit.

il fait donc ce que tu lui demandes, en quoi y'a t il perturbation ?

P.S : déjà ton delay(1) me parait bien trop court, essaye avec 500

Code : Tout sélectionner

OpenConsole()
EnableGraphicalConsole(1)

;+++++++++++++++++++++++++++++++++++++++++++++++++++
;+++++++++++++++++++++++++++++++++++++++++++++++++++
Procedure NetworkThread(*NIMP)
  Repeat
    ConsoleColor(5,0)
    Delay(250)
  ForEver
EndProcedure
;+++++++++++++++++++++++++++++++++++++++++++++++++++
;+++++++++++++++++++++++++++++++++++++++++++++++++++


CreateThread(@NetworkThread(), nimp)
               
For i = 1 To 100 
  ConsoleColor(10,0)
  PrintN("0")
  Delay(500)
Next

Repeat
ForEver

Re: Thread perturbateur

Publié : mer. 05/sept./2012 10:07
par Backup
ben non , c'est normal

tu demande dans cette boucle

Code : Tout sélectionner

For i=1 To 100
	ConsoleColor(#d_vert_clair,0)
	PrintN("0")
	Delay(1)
Next
d'ecrire en vert ...

mais en meme temps tu lance un thread qui change l'indice de couleur
alors au moins pendant la duré du thread , ça va ecrire avec la couleur du thread (magenta )


Arf : Grillé par Ar-s

Re: Thread perturbateur

Publié : mer. 05/sept./2012 10:29
par Golfy
Juste une modification qui montre la "quantité" de perturbation (normale) par le thread et vice-versa : tu verras parfois des "1" en vert et des "0" violet !
Au final cela fait de jolis dessins :lol:

Plus sérieusement,
1) les delay() < 5 ne sont pas fiables
2) il est normal que le thread arrive à se "glisser" entre l'instruction ConsoleColor(10,0) et Print("0") : le multitâche n'est pas synchrone (sauf en utilisant... les sémaphores)
3) en multitâche, il faut penser comme dans Matrix (décomposer au ralenti en "changeant" les échelles de temps) et comme dans la relativité d'Einstein (la lumière est composée de particules : un code est composé d'instructions élémentaires... discontinues) :)

Code : Tout sélectionner

OpenConsole()
EnableGraphicalConsole(1)

;+++++++++++++++++++++++++++++++++++++++++++++++++++
;+++++++++++++++++++++++++++++++++++++++++++++++++++
Procedure NetworkThread(i)
	y=1
  Repeat
  	ConsoleColor(5,1)
  	Print("1")
  	If y > 50
  		Delay(y)
  	EndIf
 	 	y+1
  ForEver
EndProcedure
;+++++++++++++++++++++++++++++++++++++++++++++++++++
;+++++++++++++++++++++++++++++++++++++++++++++++++++


CreateThread(@NetworkThread(), 2)
                
For i=1 To 100
	For g=1 To 25
		ConsoleColor(10,0)
  	Print("0")
  	Delay(50)
  Next g
  PrintN("")
  
Next

Repeat
ForEver

Re: Thread perturbateur

Publié : mer. 05/sept./2012 10:32
par SPH
Pas faux. Il faut bien choisir ce qu'on met dans un thread. :|

Mon vrai probleme n'est pas le changement de couleur. J'ai pris cette exemple mais mon reel probleme est un client et un serveur en thread. Je vais poster bientot un truc sur ce sujet...

Re: Thread perturbateur

Publié : mer. 05/sept./2012 10:36
par Golfy
SPH a écrit :Pas faux. Il faut bien choisir ce qu'on met dans un thread. :|
Tu as compris... ou bien ? :wink:
:arrow: http://www.alexandre-astier.com/t69-C-e ... rceval.htm

Re: Thread perturbateur

Publié : mer. 05/sept./2012 11:05
par SPH
Golfy a écrit :
SPH a écrit :Pas faux. Il faut bien choisir ce qu'on met dans un thread. :|
Tu as compris... ou bien ? :wink:
:arrow: http://www.alexandre-astier.com/t69-C-e ... rceval.htm
C'est pas faux :mrgreen: