Page 1 sur 1
Lancer un Timer depuis un thread
Publié : lun. 09/mai/2005 17:23
par Torp
Bonjour à tous,
j'ai un petit problème, je n'arrive pas à lancer un timer depuis un thread. Quelqu'un a t il une idée sur le pourquoi du comment...
Code : Tout sélectionner
Procedure Timer()
Debug "Timer"
EndProcedure
Procedure Coucou(Valeur)
Repeat
i+1
If i=10
Timer1=SetTimer_(#Null,#Null, 250, @Timer())
Debug Timer1
EndIf
Debug "coucou :"+Str(i)
Delay(Valeur)
ForEver
EndProcedure
OpenWindow(0,100,100,100,100,#PB_Window_SystemMenu,"Essai")
Id_Thread=CreateThread(@Coucou(),1000)
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
End
++
Publié : lun. 09/mai/2005 17:27
par bernard13
salut Torp
j'habite a 50 km de chez toi ...
Publié : lun. 09/mai/2005 17:57
par flaith
Essaye plutôt
Code : Tout sélectionner
Declare The_Timer()
Procedure Coucou(Valeur)
Repeat
i+1
If i=10
Timer1=SetTimer_(#Null,#Null, 250, @The_Timer())
Debug Timer1
EndIf
Debug "coucou :"+Str(i)
Delay(Valeur)
ForEver
EndProcedure
Procedure The_Timer()
Debug "Timer"
EndProcedure
OpenWindow(0,100,100,100,100,#PB_Window_SystemMenu,"Essai")
Id_Thread=CreateThread(@Coucou(),1000)
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
End
Publié : lun. 09/mai/2005 18:13
par Torp
Oups en effet j'ai fait un copier/coller des procedures dans le désordre...(j'ai corrigé le post).
Le problème n'est pas là...
Merci quand meme.
Publié : lun. 09/mai/2005 18:17
par flaith
J'ai changé la procédure Timer par The_Timer car, chez moi, Timer existe déjà. Après le changement ca marche !
Publié : lun. 09/mai/2005 18:25
par Torp
Désolé mais ça marche pas. Le Timer est censé écrire dans la fenetre du Debugger le Mot "Timer" tous les quart de seconde et ce n'est pas le cas...
Publié : lun. 09/mai/2005 18:42
par flaith
Peut-être parce que, justement, le TimerProc ne retourne aucune valeur !
Publié : lun. 09/mai/2005 18:57
par erix14
Et comme ça ?
Code : Tout sélectionner
Declare The_Timer()
Procedure Coucou(Valeur)
Repeat
i+1
If i=10
Timer1=SetTimer_(WindowID(0),1, 250, @The_Timer())
Debug Timer1
EndIf
Debug "coucou :"+Str(i)
Delay(Valeur)
ForEver
EndProcedure
Procedure The_Timer()
Debug "Timer"
EndProcedure
OpenWindow(0,100,100,100,100,#PB_Window_SystemMenu,"Essai")
Id_Thread=CreateThread(@Coucou(),1000)
Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
End
Publié : lun. 09/mai/2005 19:01
par flaith
Effectivement, c'est beaucoup mieux (cool j'apprends pleins de choses)

Publié : lun. 09/mai/2005 19:44
par Torp
Merci beaucoup en effet là, ca fonctionne. Pour quelle raison, lorsque l'on le lance depuis un thread, faut il le rattacher à la fenetre pour qu'il fonctionne ?
Publié : lun. 09/mai/2005 21:08
par erix14
Pour quelle raison, lorsque l'on le lance depuis un thread, faut il le rattacher à la fenetre pour qu'il fonctionne ?
je crois que un thread ne peut pas recevoir de message comme une "Windows", c'est pour cela que le timer envoyait le message je ne sais où...