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 ? :D

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