Stefou a écrit :Est-ce que c'est cela que tu cherche ?
Code : Tout sélectionner
Procedure dessine()
StartDrawing(WindowOutput(0))
Plot(200,200,0)
For x=1 To 200
For y=-x To x
Plot(200+x,200+y,RGB(x,x,x))
Plot(200-x,200-y,RGB(x,x,x))
Plot(200+y,200+x,RGB(x,x,x))
Plot(200-y,200-x,RGB(x,x,x))
Next
Delay(5)
Next
StopDrawing()
EndProcedure
;
OpenWindow(0,0,0,400,400,"test")
CreateThread(@dessine(),1)
Repeat
Until WaitWindowEvent()=#WM_CLOSE
C'est bien, mais on a oublié un détail...

Nous oublions souvent des détails
La procédure appelée comme Thread demande quelque chose à recevoir... ICI "*valeur" qui va recevoir 1 de l'appel... et ne rien faire avec !
Mais c'est comme ça... Sans ça, ça marche pas !
Tout comme dans l'exemple qui aurait pu simplement être :
Code : Tout sélectionner
Procedure dessine()
StartDrawing(WindowOutput(0))
Plot(200,200,0)
For x=1 To 200
For y=-x To x
Plot(200+x,200+y,RGB(x,x,x))
Plot(200-x,200-y,RGB(x,x,x))
Plot(200+y,200+x,RGB(x,x,x))
Plot(200-y,200-x,RGB(x,x,x))
Next
Delay(5)
Next
StopDrawing()
EndProcedure
;
OpenWindow(0,0,0,400,400,"test")
dessine() ; Appel de la procédure, dessine, puis revient et attend !
Repeat
Until WaitWindowEvent()=#WM_CLOSE
En fait la différence, c'est que le premier code avec
CreateThread(@dessine(),1) fait que le programme principal peut continuer à faire des choses pendant que la procédure dans cet exemple trace le graphique...
Tandis que dans le deuxième, le programme commence, va dessiner puis revient continuer à faire autre chose... (Ici attendre...).