Problème de timer ( enfin de KillTimer_ )

Vous débutez et vous avez besoin d'aide ? N'hésitez pas à poser vos questions
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Problème de timer ( enfin de KillTimer_ )

Message par Ar-S »

Voilà,
dans les tutos timer il ni a pas indiqué la fonction Killtimer_(.....) qui sert à tuer le timer en cours.
Toujours pour mon Resizer, je voudrais que le temps du traitement, un message clignotant apparaisse puis qu'à la fin du traitement, un message de "fin de traitement" s'affiche. J'ai donc essayé en regardant divers codes ici et là mais j'arrive au resultat suivant :
Soit le timer fonctionne si je commente la partie STOPTIMER, mais une fois le traitement terminé ( :?: ), et je n'arrive pas à l'arreter,
soit je ne le vois pas apparaitre (le cas présent).

Code : Tout sélectionner

;Rezier par Ar-S -2009 // PB 4.30

UseJPEGImageEncoder()
UseJPEGImageDecoder()

Enumeration
  #AFF : #Image : #t1
EndEnumeration
;}
Global TailleHauteur.l=1024
Global L.l,H.l,Limg.l,Himg.l
Global DernierDossier$,NouveauRep$,car$,pos,fin

Procedure Clignote(hwnd.l, uMsg.l, idEvent.l, dwTime.l)
  Static mode=0
  Select mode
    Case 0
      SetGadgetText(#AFF,"Traitement en cours !")
    Case 1
      SetGadgetText(#AFF,"")
  EndSelect
  mode = 1-mode
EndProcedure

hwnd=OpenWindow(0, 583, 629, 319, 23, "LDVM redim 1024 haut relatif", #PB_Window_SystemMenu|#PB_Window_TitleBar|#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
If hwnd
  Handle = WindowID(0)
  StringGadget(#AFF, 0, 0, 315, 20, "Glissez/déposez les images ici")
  EnableWindowDrop(0, #PB_Drop_Files, #PB_Drag_Copy)
  fin=1
 
EndIf

;{- Event loop
Repeat
  Select WaitWindowEvent()
    Case #PB_Event_Gadget
      Select EventGadget()
        Case #AFF
      EndSelect
      
    Case #PB_Event_WindowDrop
      fin=0
      If fin=0
        ; TIMER----------------------------------------------------------------------------------
        SetTimer_(Handle,#t1,300, @Clignote())
        ;ENDTIMER----------------------------------------------------------------------------
      EndIf
      
      Debug "handle : "+Str(Handle)
      
      compte=0
      Repertoire$=EventDropFiles()
      RepSav$=Repertoire$+"\"

      pos=1
      NumCar=Len(Repertoire$)
      Repeat
        car$=Right(Repertoire$,pos)
        If Left(car$,1)<>"\"
          pos=pos+1
          car$=Right(Repertoire$,pos)
        Else
          Debug "Car : "+car$
          Debug "Pos : "+Str(pos)
        EndIf  
      Until Left(car$,1)="\"

      DernierDossier$=Right(car$,pos-1)
      NouveauRep$=RepSav$+DernierDossier$+"\"
      nouveauRep=CreateDirectory(NouveauRep$)
      If nouveauRep And fin=0
        Debug "Fin : "+Str(fin)+" (0=on ; 1=off)"
       
        If ExamineDirectory(0, Repertoire$, "*.jpg")  
          While NextDirectoryEntry(0)
            If DirectoryEntryType(0) = #PB_DirectoryEntry_File
              compte=compte+1
              NomRepertoire$ = EventDropFiles()
              fichier$=DirectoryEntryName(0)
              charge=LoadImage(#Image, RepSav$+fichier$)
              If charge
                Limg=ImageWidth(#Image):Himg=ImageHeight(#Image)
                H=TailleHauteur : L=Limg*TailleHauteur/Himg
                
                NomNew$=Str(compte)+".jpg"
                ResizeImage(#Image,L,H,#PB_Image_Smooth)
                SaveImage(#Image,NouveauRep$+NomNew$,#PB_ImagePlugin_JPEG,80)
                Delay(10)
              Else
                SetGadgetText(#AFF,"Erreur de chargement de L'image")
              EndIf
            Else
              Debug "aucune image jpg"
            EndIf
          Wend
          FinishDirectory(0)
          fin=1
          Debug "Fin : "+Str(fin)+" (0=on ; 1=off)"
        EndIf
      Else
        Debug "creation de dossier impossible"
      EndIf
      
      ;STOPTIMER---------------------------------------------------------
      If fin=1
        KillTimer_(Handle, #t1)
        SetGadgetText(#AFF,"Terminé")
      EndIf  
      ;FINSTOPTIMER---------------------------------------------------
      
    Case #PB_Event_CloseWindow
      Select EventWindow()
        Case 0
          CloseWindow(0)
          Break
      EndSelect
  EndSelect
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
Fred
Site Admin
Messages : 2809
Inscription : mer. 21/janv./2004 11:03

Re: Problème de timer ( enfin de KillTimer_ )

Message par Fred »

La 4.40 embarque une gestion native des timers, peut etre que ca peut t'aider ?
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Problème de timer ( enfin de KillTimer_ )

Message par Ar-S »

Merci Fred, j'ai bien vu cette nouveauté (qui m'a bien fait plaisir), mais j'attends la version définitive de la 4.40 pour m'en servir. De plus j'ai qques lib incompatibles qu'il faudra que je mette à jour (par pour le cas présent mais bon..).
C'est pour ça que j'aimerai une solution pour la 4.30 en attendant. En ce moment je traite, redimensionne des milliers de photos scannées donc faut que j'avance.

En attendant j'ai ajouté un playsound pour me prévenir de la fin du traitement d'un dossier mais bon, j'aime bien aller au bout des choses et puis ces timers restent très utiles donc j'aimerai piger.
~~~~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: Problème de timer ( enfin de KillTimer_ )

Message par Backup »

il ne faut pas arreter ton timer !

un timer c'est comme une horloge...

tu le met en route au debut de ton prg , et ensuite tu utilise un systeme de variable
pour utiliser ton horloge ou pas !

ensuite tu détruit ton horloge (timer) a la fin de ton prg :)

dans l'exemple suivant , je déclenche le tir d'une balle jaune grace a la variable "Gachette"

la balle ne part qu'au moment ou gachette=1

mais j'ai ajouter un compteur qui va decider d'arreter le tir de la balle

rien n'empeche de relancer la tir en remettant le compteur a Zero par exemple :)

pour ton principe de clignotement c'est pareil :)

Code : Tout sélectionner

 Declare TimerProc(hwnd.l, uMsg.l, idEvent.l, dwTime.l)

Enumeration
    #Window
    #timer_1
    #timer_2
    #timer_3
    #ball
EndEnumeration

Structure ball
    x.l
    y.l 
    sensy.l
EndStructure
Dim ball.ball(1)
ball(1)\x =1024/2
ball(1)\y=768
ball(1)\sensy.l=-16
Global gachette.b,compteur_de_tir


InitSprite():InitKeyboard()


If OpenWindow(#Window, 100, 100, 1024, 768,"", #PB_Window_SystemMenu)
    OpenWindowedScreen(WindowID(#Window),10,10,1024,768,1,1,1) 
    ; ********** creation du sprite ********************
    CreateSprite(#ball,32,32)
    StartDrawing(SpriteOutput(#ball))
        Circle(16,16,16,RGB(255,255,0))
    StopDrawing()
    ; **********************************************
    DisplaySprite(#ball,ball(1)\x,ball(1)\y)
    FlipBuffers()
    
    Handle = WindowID(#Window) 
    SetTimer_(Handle, #timer_1, 1000, @TimerProc()) ; envoie un evenement toutes les 1000 millisecondes (1 seconde) ; en fait on prepare un timer qui enverra cette evenement 
    ; *********** boucle principale ******************************************
    Repeat 
        Event=WindowEvent()  
        ExamineKeyboard()
        If compteur_de_tir>10
            beep_(50,100)
            gachette.b=0 ; on a arreté le tir parceque le compteur est superieur a 10
            ; mais le timer tourne toujours ..... ;o) 
        EndIf
        
        If gachette.b=1   ; le timer a declenché la gachette 
            
            
            ball(1)\y=ball(1)\y+ball(1)\sensy.l 
            If  ball(1)\y<0
                ball(1)\y=768
                gachette.b=0 ; la balle est arrivé en haut on la remet a sa place, et la gachette reviens a sa place
            EndIf 
        Else
            ball(1)\y=768  
            gachette.b=0 ; on remet la gachette a zero pour le prochain timer
    
    EndIf
    
        
        
        ;  CallDebugger
        DisplaySprite(#ball,ball(1)\x,ball(1)\y)
        FlipBuffers()
        ClearScreen(RGB(0,0,0))
        
    Until KeyboardPushed(#PB_Key_Escape) Or Event=#PB_Event_CloseWindow
    ; **********************************************************************
EndIf 



; cette procedure contient les actions a effectuer par le timer
Procedure TimerProc(hwnd.l, uMsg.l, idEvent.l, dwTime.l)
    Select uMsg
        Case #WM_TIMER
            Select idEvent
                Case  #timer_1 ; on va se servir du timer comme gachette de tir !!
                    Debug "--------------------1 seconde"
                    ; Ici, le code à executer toutes les secondes 
                    compteur_de_tir=compteur_de_tir+1 ; on incrmente le nombre de tir , pour pouvoir l'arreter
                    gachette.b=1
            EndSelect
    EndSelect
EndProcedure
 
Geo Trouvpatou
Messages : 471
Inscription : dim. 23/déc./2007 18:10

Re: Problème de timer ( enfin de KillTimer_ )

Message par Geo Trouvpatou »

Salut.

Au bout de 10 à 12 secondes, j'ai un bruit bizarre qui se fait entendre en exécutant ton code Dobro.
Comme un grésillement électrique.
Même après redémarrage du PC.

Suis-je le seul?

En tout cas c'est super flippant.
J'ai Asus AISuite qui permet de vérifier des bricoles et j'ai même activé le gestionnaire des taches de Windows (Onglet : Performance) pour voir s'il y avait quelque chose d'anormal (chauffe proco ou carte mère) mais apparement rien.

Étrange.

Bye.
Geo Trouvpatou
Messages : 471
Inscription : dim. 23/déc./2007 18:10

Re: Problème de timer ( enfin de KillTimer_ )

Message par Geo Trouvpatou »

Je viens de trouver.
C'est ton Beep_(50,100) qui faisait ce bruit.
Donc c'est bien au bout de 10sec (j'avais mis 10 à 12sec) parce qu'en voyant ça :
If compteur_de_tir>10
ça ne fait plus aucun doute.

Bon je vais changer de slip.
Tu peux te vanter de m'avoir bien fait flipper Dobro (Avant même Hallowen).

A vrai dire c'est un nouveau PC que j'ai monté de toute pièce il y à environ 1 mois que j'utilise dorénavant et ne le connaissant pas encore bien, je me suis posé des tas de questions.

Je suis de nouveau rassuré.
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Problème de timer ( enfin de KillTimer_ )

Message par Ar-S »

Grrrr ça me saoul !
J'ai essayé de modifier le code, je n'ai pas plus de succès, je comprends pas comment ton timer reconnait ta valeur gachette.
C'est même pire ! :roll:

Code : Tout sélectionner

;Rezier par Ar-S -2009 // PB 4.30
InitSound   ()  ; initialisation du son
#Son =1

UseJPEGImageEncoder()
UseJPEGImageDecoder()

Enumeration
  #AFF : #Image : #t1
EndEnumeration
;}
Global TailleHauteur.l=1024
Global L.l,H.l,Limg.l,Himg.l
Global DernierDossier$,NouveauRep$,car$,pos,fin
Declare Clignote(hwnd.l, uMsg.l, idEvent.l, dwTime.l)

Procedure Clignote(hwnd.l, uMsg.l, idEvent.l, dwTime.l)
  Select uMsg
    Case #WM_TIMER
      If timer=1
        Select idEvent
          Case  #t1 
            Static mode=0
            Select mode
              Case 0
                SetGadgetText(#AFF,"Traitement en cours !")
              Case 1
                SetGadgetText(#AFF,"")
            EndSelect
            timer=0
            mode = 1-mode
        EndSelect   
        If timer=0
          Select idEvent
            Case  #t1
              SetGadgetText(#AFF,"terminé")
          EndSelect
        EndIf
      EndIf
  EndSelect
EndProcedure
    
hwnd=OpenWindow(0, 583, 629, 319, 23, "LDVM redim 1024 haut relatif", #PB_Window_SystemMenu|#PB_Window_TitleBar|#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
If hwnd
  StickyWindow(0,1)
  ;CatchSound ( #Son , ?chimes_wav_Start , ?chimes_wav_End)
  Handle = WindowID(0)
  ; TIMER----------------------------------------------------------------------------------
  SetTimer_(Handle,#t1,300, @Clignote())
  ;ENDTIMER----------------------------------------------------------------------------
  StringGadget(#AFF, 0, 0, 315, 20, "Glissez/déposez les images ici")
  EnableWindowDrop(0, #PB_Drop_Files, #PB_Drag_Copy)
  timer=0
  
EndIf
    
    ;{- Event loop
Repeat
  Select WaitWindowEvent()
    Case #PB_Event_Gadget
      Select EventGadget()
        Case #AFF
      EndSelect
      
    Case #PB_Event_WindowDrop
      timer=1
      Debug "handle : "+Str(Handle)
      
      compte=0
      Repertoire$=EventDropFiles()
      RepSav$=Repertoire$+"\"
      
      pos=1
      NumCar=Len(Repertoire$)
      Repeat
        car$=Right(Repertoire$,pos)
        If Left(car$,1)<>"\"
          pos=pos+1
          car$=Right(Repertoire$,pos)
        Else
          Debug "Car : "+car$
          Debug "Pos : "+Str(pos)
        EndIf  
      Until Left(car$,1)="\"
      
      DernierDossier$=Right(car$,pos-1)
      NouveauRep$=RepSav$+DernierDossier$+"\"
      nouveauRep=CreateDirectory(NouveauRep$)
      If nouveauRep And timer=1
        Debug "Fin : "+Str(fin)+" (0=on ; 1=off)"
        
        If ExamineDirectory(NumDir, Repertoire$, "*.jpg")  
          While NextDirectoryEntry(0)
            If DirectoryEntryType(0) = #PB_DirectoryEntry_File
              compte=compte+1
              ;txtListe$="AddGadgetItem(#list, 0, "+Chr(34)+DernierDossier$+Chr(34)+")"
              SetClipboardText(DernierDossier$)
              NomRepertoire$ = EventDropFiles()
              fichier$=DirectoryEntryName(0)
              charge=LoadImage(#Image, RepSav$+fichier$)
              If charge
                Limg=ImageWidth(#Image):Himg=ImageHeight(#Image)
                H=TailleHauteur : L=Limg*TailleHauteur/Himg
                
                NomNew$=Str(compte)+".jpg"
                ResizeImage(#Image,L,H,#PB_Image_Smooth)
                SaveImage(#Image,NouveauRep$+NomNew$,#PB_ImagePlugin_JPEG,75)
                Delay(10)
              Else
                SetGadgetText(#AFF,"Erreur de chargement de L'image")
              EndIf
            Else
              Debug "aucune image jpg"
            EndIf
          Wend
          FinishDirectory(0)
          ;NumDir=NumDir+1
          
          Debug "Fin : "+Str(fin)+" (0=on ; 1=off)"
        EndIf
      Else
        Debug "creation de dossier impossible"
      EndIf
      
      ;PlaySound ( #Son ,1)
      ;Delay (600)
      ;StopSound(#Son)

      ;STOPTIMER---------------------------------------------------------
      timer=0
      ;SetGadgetText(#AFF,"Terminé")
      ;FINSTOPTIMER---------------------------------------------------
      
    Case #PB_Event_CloseWindow
      Select EventWindow()
        Case 0
          CloseWindow(0)
          Break
      EndSelect
  EndSelect
ForEver
    
;j'ai viré la datasection du son    

~~~~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: Problème de timer ( enfin de KillTimer_ )

Message par Backup »

oui le beep_() etait la pour faire entendre que l'arret du tir a ete pris en compte :lol:

J'ai essayé de modifier le code, je n'ai pas plus de succès, je comprends pas comment ton timer reconnait ta valeur gachette.
c'est simple pourtant :)


lorsque je defini le timer , j'ai mis ça :
Case #timer_1 ; on va se servir du timer comme gachette de tir !!
Debug "--------------------1 seconde"
; Ici, le code à executer toutes les secondes
compteur_de_tir=compteur_de_tir+1 ; on incrmente le nombre de tir , pour pouvoir l'arreter
gachette.b=1
donc lorsque le timer appel cette parti de prg, (toute les secondes)
j'incremente le compteur
et
je met gachette = 1

cette variable indique dans mon prg que le tir (ou ton clignotement ) doit avoir lieu


cette partie de prg donc :
If gachette.b=1 ; le timer a déclenché la gachette

ball(1)\y=ball(1)\y+ball(1)\sensy.l
If ball(1)\y<0
ball(1)\y=768
gachette.b=0 ; la balle est arrivé en haut on la remet a sa place, et la gachette reviens a sa place
EndIf
Else
ball(1)\y=768
gachette.b=0 ; on remet la gachette a zero pour le prochain timer

EndIf
comme tu peux le voir j'execute l'animation de la balle tant que gachette =1
et tant que la balle est dans l'ecran

des que la balle sort de l'ecran, je remet gachette=0 ce qui a pour effet d'arreter le traitement de cette partie du code
donc, l'animation s'arrete ,
elle reprendra lorsque gachette sera a nouveau =1 (dans la prochaine seconde)

cependant ma variable compteur veille !
grace a ce petit code posé avant l'animation ci dessus
If compteur_de_tir>10
beep_(50,100)
gachette.b=0 ; on a arreté le tir parceque le compteur est superieur a 10
; mais le timer tourne toujours ..... ;o)
EndIf
je commence donc par regarder si compteur>10
si c'est le cas, j'annule (je la relache) la gachette en la remettant a zero
ce qui annule l'effet produit par le timer ! :)

lui le timer passera toute sa vie a chercher a mettre gachette=1 toute les secondes

mais compteur_de_tir lui au bout de 10 secondes, passera sa vie a remettre gachette = 0
et comme il est situé en premier dans le code, c'est lui qui aura le dernier mot ! :lol:
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Problème de timer ( enfin de KillTimer_ )

Message par Ar-S »

Bon ba je dois être très con mais ça ne veux pas marcher :? j'essaye pourtant de faire en sorte que timer=0 n'affiche plus le timer mais que dalle,
il est visible du début à la fin, Pire, il freeze pendant que le soft travail les images.

Code : Tout sélectionner

;Rezier par Ar-S -2009 // PB 4.30
InitSound   ()  ; initialisation du son
; #Son =1
UseJPEGImageEncoder()
UseJPEGImageDecoder()

Enumeration
  #AFF : #Image : #t1
EndEnumeration
;}
Global TailleHauteur.l=1024
Global L.l,H.l,Limg.l,Himg.l
Global DernierDossier$,NouveauRep$,car$,pos,fin
Declare Clignote(hwnd.l, uMsg.l, idEvent.l, dwTime.l)

Procedure Clignote(hwnd.l, uMsg.l, idEvent.l, dwTime.l)
  Select uMsg
    Case #WM_TIMER
      Select idEvent
        Case  #t1 
          timer=1
          Static mode=0
          Select mode
            Case 0
              SetGadgetText(#AFF,"Traitement en cours !")
            Case 1
              SetGadgetText(#AFF,"")
          EndSelect
          mode = 1-mode
      EndSelect    
  EndSelect
EndProcedure
    
hwnd=OpenWindow(0, 583, 629, 319, 23, "LDVM redim 1024 haut relatif", #PB_Window_SystemMenu|#PB_Window_TitleBar|#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
If hwnd
  StickyWindow(0,1)
  ; CatchSound ( #Son , ?chimes_wav_Start , ?chimes_wav_End)
  Handle = WindowID(0)
  ; TIMER----------------------------------------------------------------------------------
  SetTimer_(Handle,#t1,300, @Clignote())
  ;ENDTIMER----------------------------------------------------------------------------
  StringGadget(#AFF, 0, 0, 315, 20, "Glissez/déposez les images ici")
  EnableWindowDrop(0, #PB_Drop_Files, #PB_Drag_Copy)
EndIf
    
    ;{- Event loop
Repeat
  timer=0
  Select WaitWindowEvent()
    Case #PB_Event_Gadget
      Select EventGadget()
        Case #AFF
      EndSelect
      
    Case #PB_Event_WindowDrop
      timer=1
      Debug "handle : "+Str(Handle)
      
      compte=0
      Repertoire$=EventDropFiles()
      RepSav$=Repertoire$+"\"
      
      pos=1
      NumCar=Len(Repertoire$)
      Repeat
        car$=Right(Repertoire$,pos)
        If Left(car$,1)<>"\"
          pos=pos+1
          car$=Right(Repertoire$,pos)
        Else
          Debug "Car : "+car$
          Debug "Pos : "+Str(pos)
        EndIf  
      Until Left(car$,1)="\"
      
      DernierDossier$=Right(car$,pos-1)
      NouveauRep$=RepSav$+DernierDossier$+"\"
      nouveauRep=CreateDirectory(NouveauRep$)
      If nouveauRep And timer=1
        Debug "Fin : "+Str(fin)+" (0=on ; 1=off)"
        
        If ExamineDirectory(NumDir, Repertoire$, "*.jpg")  
          While NextDirectoryEntry(0)
            If DirectoryEntryType(0) = #PB_DirectoryEntry_File
              compte=compte+1
              ;txtListe$="AddGadgetItem(#list, 0, "+Chr(34)+DernierDossier$+Chr(34)+")"
              SetClipboardText(DernierDossier$)
              NomRepertoire$ = EventDropFiles()
              fichier$=DirectoryEntryName(0)
              charge=LoadImage(#Image, RepSav$+fichier$)
              If charge
                Limg=ImageWidth(#Image):Himg=ImageHeight(#Image)
                H=TailleHauteur : L=Limg*TailleHauteur/Himg
                
                NomNew$=Str(compte)+".jpg"
                ResizeImage(#Image,L,H,#PB_Image_Smooth)
                SaveImage(#Image,NouveauRep$+NomNew$,#PB_ImagePlugin_JPEG,75)
                Delay(10)
              Else
                SetGadgetText(#AFF,"Erreur de chargement de L'image")
              EndIf
            Else
              Debug "aucune image jpg"
            EndIf
          Wend
          FinishDirectory(0)
          timer=0
          
          Debug "Fin : "+Str(fin)+" (0=on ; 1=off)"
        EndIf
      Else
        Debug "creation de dossier impossible"
      EndIf
      
      ; PlaySound ( #Son ,1)
      ; Delay (600)
      ; StopSound(#Son)
      ;STOPTIMER---------------------------------------------------------
      timer=0
      ;SetGadgetText(#AFF,"Terminé")
      ;FINSTOPTIMER---------------------------------------------------
      
    Case #PB_Event_CloseWindow
      Select EventWindow()
        Case 0
          CloseWindow(0)
          Break
      EndSelect
  EndSelect
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
zaphod
Messages : 135
Inscription : dim. 07/déc./2008 9:32

Re: Problème de timer ( enfin de KillTimer_ )

Message par zaphod »

je sais pas si ca va t'aider (et si j'ai tout compris) mais j'ai un code qui marche :

Code : Tout sélectionner

;{- Enumerations / DataSections
;{ Windows
Enumeration
  #Window_0
EndEnumeration
;}
;{ Gadgets
Enumeration
  #Text_0
  #Button_1
  #Button_2
  #timer
EndEnumeration
;}
;}
Procedure clignote()
 Static mode=0
  Select mode
    Case 0
      SetGadgetText(#text_0,"Traitement en cours !")
    Case 1
      SetGadgetText(#text_0,"")
  EndSelect
  mode = 1-mode
EndProcedure

Procedure OpenWindow_Window_0()
  If OpenWindow(#Window_0, 450, 200, 242, 164, "Window_0", #PB_Window_SystemMenu|#PB_Window_SizeGadget|#PB_Window_MinimizeGadget|#PB_Window_TitleBar)
    TextGadget(#Text_0, 55, 20, 125, 25, "Gadget_0", #PB_Text_Border|#PB_Text_Center)
    ButtonGadget(#Button_1, 55, 60, 60, 25, "start")
    ButtonGadget(#Button_2, 125, 60, 60, 25, "stop")
  EndIf
EndProcedure

OpenWindow_Window_0()

;{- Event loop
Repeat
  Select WaitWindowEvent()
    ; ///////////////////
    Case #PB_Event_Gadget
      Select EventGadget()
        Case #Text_0
        Case #Button_1
        SetTimer_(WindowID(0),#timer,300, @Clignote())
        Case #Button_2
         KillTimer_(WindowID(0), #timer)
      EndSelect
    ; ////////////////////////
    Case #PB_Event_CloseWindow
      Select EventWindow()
        Case #Window_0
          CloseWindow(#Window_0)
          Break
      EndSelect
  EndSelect
ForEver
;
;}
Si on utilise pas le bon handle dans le killtimer ca ne s'arrête pas.
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Problème de timer ( enfin de KillTimer_ )

Message par Ar-S »

Merci Zaphod, c'est un peu ce que j'avais tenté en premier lieu..
Je fais finir par croire que c'est l'#PB_Event_WindowDrop qui est en cause !
J'ai mis mon code complet ici : http://ldvmultimedia.free.fr/temp/timer_de_mes_deux.pb si tu veux y jeter un oeil.
Il me semble pourtant faire exactement la même chose que tans ton code précédent et ça ne marche toujours pas.
~~~~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: Problème de timer ( enfin de KillTimer_ )

Message par Backup »

..............
Dernière modification par Backup le sam. 01/oct./2011 12:28, modifié 1 fois.
Avatar de l’utilisateur
Ar-S
Messages : 9540
Inscription : dim. 09/oct./2005 16:51
Contact :

Re: Problème de timer ( enfin de KillTimer_ )

Message par Ar-S »

Merci Dobro.
Je pense effectivement que les thread sont plus appropriés, en attendant je trouve tout ça pas très claire, je fais un blocage dessus c'est vraiment chiant.
merci pour votre aide, vu que j'ai encore pas mal de photos à faire, je vais me limiter à mon petit son pour avertir de la fin du traitement.

---edit-----
mais j'y reviendrai :mrgreen:
~~~~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
Avatar de l’utilisateur
MLD
Messages : 1124
Inscription : jeu. 05/févr./2009 17:58
Localisation : Bretagne

Re: Problème de timer ( enfin de KillTimer_ )

Message par MLD »

Bonjour Ar-S
Avec un peu de retard, regarde ceci pour un arrêt Timer

Code : Tout sélectionner

; Timer pour clignoter par Ar-S
; thks to dobro & NetMestro and MLD
; PB . 4.30

Enumeration
  #WIN
  #BT
  #BT5= 5
  #string_1 = 2
  #string_2 = 3
EndEnumeration

Global Affiche$ 
Procedure TimerProc(hwnd.l, uMsg.l, idEvent$, dwTime.l) ;timer 
idEvent = Val(Left(idEvent$,1))
texte$ = Right( idEvent$,Len(idEvent$)-1)
Select uMsg 
  Case #WM_TIMER 
   Select idEvent 
    Case 2
     If GetGadgetText(idEvent) = ""  
     SetGadgetText(idEvent,texte$)
    Else
    SetGadgetText(idEvent,"")
   EndIf
   EndSelect 
EndSelect 
EndProcedure

  If OpenWindow(#WIN, 450, 200, 377, 60, "clignote", #PB_Window_SystemMenu|#PB_Window_TitleBar)
    Handle = WindowID (#WIN ) ;Handle de la fenêtre
    StringGadget(#string_1, 0, 0, 200, 22, "", #PB_String_ReadOnly|#ES_CENTER)
    StringGadget(#string_2, 0, 30, 200, 22, "Fixe", #PB_String_ReadOnly|#ES_CENTER)
    ButtonGadget(#BT,210,0,150,20,"Clic")
    ButtonGadget(#BT5,210,30,150,20,"arret Clignote")
  EndIf


Repeat
  Select WaitWindowEvent()
    Case #PB_Event_Gadget
      Select EventGadget()
        Case #BT
           Affiche$ = "2" + "Clignoti clignota"
           ; ¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤
           Timer = SetTimer_ (Handle, Affiche$, 800, @TimerProc()) ;  Timer 
        Case#BT5 
        ;¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤¤           
           KillTimer_(WindowID(#WIN),Timer) 
      EndSelect
      
    Case #PB_Event_CloseWindow
      Select EventWindow()
        Case #WIN
          KillTimer_(WindowID(#WIN), Timer)
          CloseWindow(#WIN)
          Break
      EndSelect
  EndSelect
ForEver

A+ Michel
zaphod
Messages : 135
Inscription : dim. 07/déc./2008 9:32

Re: Problème de timer ( enfin de KillTimer_ )

Message par zaphod »

J'ai repris le source et j'ai utilisé un thread à la place d'un timer.
La priorité du timer est faible et je crois que c'est la que ca coince.
Il faut coller un windowevent() dans la boucle de traitement.

Code : Tout sélectionner

;Rezier par Ar-S -2009 // PB 4.30
InitSound   ()  ; initialisation du son
#Son =1
UseJPEGImageEncoder()
UseJPEGImageDecoder()

Enumeration
  #AFF : #Image : #t1
EndEnumeration
;}
Global TailleHauteur.l=1024
Global L.l,H.l,Limg.l,Himg.l
Global DernierDossier$,NouveauRep$,car$,pos,fin
Declare Clignote(d.i)

Procedure Clignote(d.i)
  Static mode=0
 Repeat
  Select mode
    Case 0
      SetGadgetText(#AFF,"traitement en cours")
    Case 1
      SetGadgetText(#AFF,"")
  EndSelect
  mode = 1-mode
  Delay(d)
  ForEver
EndProcedure
    
OpenWindow(0, 583, 629, 319, 23, "LDVM redim 1024 haut relatif", #PB_Window_SystemMenu|#PB_Window_TitleBar|#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered)
StickyWindow(0,1)
CatchSound ( #Son , ?chimes_wav_Start , ?chimes_wav_End)
StringGadget(#AFF, 0, 0, 315, 20, "Glissez/déposez les images ici")
EnableWindowDrop(0, #PB_Drop_Files, #PB_Drag_Copy)
    
    ;{- Event loop
Repeat
  Select WaitWindowEvent()
    Case #PB_Event_Gadget
      Select EventGadget()
        Case #AFF
      EndSelect
      
    Case #PB_Event_WindowDrop
      ; Select #WM_TIMER
        ; Case #t1
          ; Demarrage du TIMER----------------------------------------------------------------------------------
         thread=CreateThread(@clignote(),300)
         ; SetTimer_(WindowID(0),#t1,300, @Clignote())
          ;ENDTIMER----------------------------------------------------------------------------
      ; EndSelect
      Debug EventDropFiles()
      
      compte=0
      Repertoire$=EventDropFiles()
      RepSav$=Repertoire$+"\"
      
      pos=1
      NumCar=Len(Repertoire$)
      Repeat
        car$=Right(Repertoire$,pos)
        If Left(car$,1)<>"\"
          pos=pos+1
          car$=Right(Repertoire$,pos)
        Else
          Debug "Car : "+car$
          Debug "Pos : "+Str(pos)
        EndIf  
      Until Left(car$,1)="\"
      
      DernierDossier$=Right(car$,pos-1)
      NouveauRep$=RepSav$+DernierDossier$+"\"
      nouveauRep=CreateDirectory(NouveauRep$)
      If nouveauRep 
        Debug "Fin : "+Str(fin)+" (0=on ; 1=off)"
        
        If ExamineDirectory(NumDir, Repertoire$, "*.jpg")  
          While NextDirectoryEntry(0)
            If DirectoryEntryType(0) = #PB_DirectoryEntry_File
              compte=compte+1
              ;txtListe$="AddGadgetItem(#list, 0, "+Chr(34)+DernierDossier$+Chr(34)+")"
              SetClipboardText(DernierDossier$)
              NomRepertoire$ = EventDropFiles()
              fichier$=DirectoryEntryName(0)
              charge=LoadImage(#Image, RepSav$+fichier$)
              If charge
                Limg=ImageWidth(#Image):Himg=ImageHeight(#Image)
                H=TailleHauteur : L=Limg*TailleHauteur/Himg
                
                NomNew$=Str(compte)+".jpg"
                ResizeImage(#Image,L,H,#PB_Image_Smooth)
                SaveImage(#Image,NouveauRep$+NomNew$,#PB_ImagePlugin_JPEG,75)
                WindowEvent()
                ;Delay(10)
              Else
                SetGadgetText(#AFF,"Erreur de chargement de L'image")
              EndIf
            Else
              Debug "aucune image jpg"
            EndIf
          Wend
          FinishDirectory(0)
          
          
          Debug "Fin : "+Str(fin)+" (0=on ; 1=off)"
        EndIf
      Else
        Debug "creation de dossier impossible"
      EndIf
      
      PlaySound ( #Son ,1)
      ;Delay (600)
      StopSound(#Son)
      ;STOPTIMER---------------------------------------------------------
      KillThread(thread)
      ;KillTimer_(WindowID(0), #t1)
      SetGadgetText(#AFF,"Terminé")
      ;FINSTOPTIMER---------------------------------------------------
      
    Case #PB_Event_CloseWindow
      Select EventWindow()
        Case 0
          If IsThread(thread)
          KillThread(thread)
          EndIf
          CloseWindow(0)
          Break
      EndSelect
  EndSelect
ForEver
Ca va peut_être coller comme ca ???
Répondre