Thread perturbateur

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
SPH
Messages : 4947
Inscription : mer. 09/nov./2005 9:53

Thread perturbateur

Message 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)

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Thread perturbateur

Message 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
~~~~Règles du forum ~~~~
⋅.˳˳.⋅ॱ˙˙ॱ⋅.˳Ar-S ˳.⋅ॱ˙˙ॱ⋅.˳˳.⋅
W11x64 PB 6.x
Section HORS SUJET : ICI
LDV MULTIMEDIA : Dépannage informatique & mes Logiciels PB
UPLOAD D'IMAGES : Uploader des images de vos logiciels
Backup
Messages : 14526
Inscription : lun. 26/avr./2004 0:40

Re: Thread perturbateur

Message 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
Golfy
Messages : 423
Inscription : mer. 25/août/2004 15:14
Localisation : Grenoble
Contact :

Re: Thread perturbateur

Message 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
Purebasic 5.30 full sous Windows XP (x86) et Win7 (64 bits), Linux Debian. Orientation réseaux, domotique
http://golfy.olympe.in/Teo-Tea/
Avatar de l’utilisateur
SPH
Messages : 4947
Inscription : mer. 09/nov./2005 9:53

Re: Thread perturbateur

Message 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...

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Golfy
Messages : 423
Inscription : mer. 25/août/2004 15:14
Localisation : Grenoble
Contact :

Re: Thread perturbateur

Message 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
Purebasic 5.30 full sous Windows XP (x86) et Win7 (64 bits), Linux Debian. Orientation réseaux, domotique
http://golfy.olympe.in/Teo-Tea/
Avatar de l’utilisateur
SPH
Messages : 4947
Inscription : mer. 09/nov./2005 9:53

Re: Thread perturbateur

Message 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:

!i!i!i!i!i!i!i!i!i!
!i!i!i!i!i!i!
!i!i!i!
//// Informations ////
Intel Core i7 4770 64 bits - GTX 650 Ti
Version de PB : 6.12LTS- 64 bits
Répondre