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
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 ?
http://www.alexandre-astier.com/t69-C-e ... rceval.htm
Re: Thread perturbateur
Publié : mer. 05/sept./2012 11:05
par SPH
C'est pas faux
