Seite 1 von 2

Thread vohrzeitieg benden ?

Verfasst: 26.03.2008 14:33
von Kratermonster
hallo
Ich habe diesen Thread

CreateThread(@mein_timer(), 5)

Code: Alles auswählen

Procedure mein_timer(parameter)

    Repeat
    If meinaus = 13
    ProcedureReturn
    EndIf
    
    If parameter = 0 
         Global fine = 13
         ProcedureReturn  
          
    EndIf
    parameter-1
    anzeige.s = FormatDate("%hh:%ii:%ss", parameter)
    Delay(1000)
    SetGadgetText(#time_0, anzeige)
  
  ForEver
EndProcedure

Das ist ein zähler den ich manchmal schon voher benden will.
Ich hab versuche ihn mit einer Globalen variablen vohrzeitieg auszumachen, "meinaus = 13"
hat nicht geklapt, immer wenn ich das fenster schliese in dem der zähler angezeigt wird macht das hier SetGadgetText(#time_0, anzeige) nen bug.

Weis jemand wie ich den vohrzeitieg stoppen kann ?

mfg Duc

Re: Thread vohrzeitieg benden ?

Verfasst: 26.03.2008 14:40
von Kiffi
Für das, was Du (glaube ich) vorhast, kannst Du besser die Timer-APIs
nehmen: SetTimer_() und KillTimer_()

Kommste mit diesen Infos (+Boardsuche) erst einmal klar? Wenn nicht -> Nochmal nachfragen

Grüße ... Kiffi

Verfasst: 26.03.2008 14:46
von Kratermonster
DAnke aber,
ich brauch nen Thread
weil der time mein Program beinträchtiegt....
(meine fenster werden dann nicht meher richtieg angezeigt...)

mfg duc

Verfasst: 26.03.2008 14:51
von Kiffi
Kratermonster hat geschrieben:ich brauch nen Thread
brauchst Du nicht ;-)
Kratermonster hat geschrieben:weil der time mein Program beinträchtiegt....
(meine fenster werden dann nicht meher richtieg angezeigt...)
dann schmeiß mal die Repeat-Forever-Schleife raus.

Grüße ... Kiffi

ähm ?

Verfasst: 26.03.2008 15:00
von Kratermonster
öhm jetzt zählt er aber nicht meher ? naja von 5 auf 4 aber das wars ?
mfg duc

Verfasst: 26.03.2008 15:01
von NicTheQuick
Mach doch einfach 'KillThread()' und gut ist.
Der eben 'meinaus' auf 13 setzen und danach erstmal ein 'WaitThread()' und
danach das Fenster schließen.

Verfasst: 26.03.2008 15:28
von Kratermonster
KillThread(@mein_timer())
Ist ein bissel radikal ;)
Das macht das prog dicht.. "Program bendet"

Eigentlich sole er ja dann mein setings fenster starten....

Code: Alles auswählen

;*** Setings Fenster ***
set:
aus = 0
sett = 0
KillThread(@mein_timer())
CloseWindow(#Window_0)
win2()      
auslesn(0)    
Repeat

event   = WindowEvent()
gadget  = EventGadget()
 
  If event
 
    Select event
 
    Case #PB_Event_CloseWindow       
      CloseWindow(#Window_1)
       Global setauss = 0
       aus = 1   
    
    Case #PB_Event_Gadget
    
      Select gadget
      
      Case #Button_1
       Speichern()
       CloseWindow(#Window_1)
       Global setauss = 0
       aus = 1
       bstart = 1
              
      EndSelect
    
    
    EndSelect
                              
  EndIf                         

Delay(10) 
Until aus = 1
Aber danach komt nix meher tot...

Re: ähm ?

Verfasst: 26.03.2008 16:27
von Kiffi
Kratermonster hat geschrieben:öhm jetzt zählt er aber nicht meher ? naja von 5 auf 4 aber das wars ?
bin nach wie vor der Meinung, dass Du keinen Thread benötigst. Allerdings
gehe ich auch davon aus, dass Du in der Prozedur lediglich die Zeit anzeigen
willst. Wenn dem so ist, dann reicht der Timer voll und ganz.

Es wäre gut, wenn Du uns ein wenig mehr Informationen über das lieferst,
was Du da eigentlich machst.

Grüße ... Kiffi

// Edit: Hier nochmal 'n Code (da bleibt nix stehen oder hängen):

Code: Alles auswählen

#MeinFenster = 0
#MeinFenster_Uhrzeit = 0
#MeinTimer = 0

Procedure MeineTimerProcedure()
  SetGadgetText(#MeinFenster_Uhrzeit, FormatDate("%hh:%mm:%ss", Date()))
EndProcedure


If OpenWindow(#MeinFenster, #PB_Ignore, #PB_Ignore, 300, 300, "")
  If CreateGadgetList(WindowID(#MeinFenster))
    TextGadget(#MeinFenster_Uhrzeit, 5, 5, 100, 20, "", #PB_Text_Border)
    
    SetTimer_(WindowID(#MeinFenster), #MeinTimer, 1000, @MeineTimerProcedure()) 
    
    Repeat
    Until WaitWindowEvent() = #PB_Event_CloseWindow
    
    KillTimer_(WindowID(#MeinFenster), #MeinTimer)
    
  EndIf
EndIf

Verfasst: 26.03.2008 23:32
von HeX0R
Man sollte die TimerProc aber auch mit den richtigen Parametern deklarieren, sonst sucht man sich evtl. nen Wolf nach Programmabstürzen durch IMAs.
(Is mir mal passiert unter Vista)

Also:

Code: Alles auswählen

Procedure MeineTimerProcedure(hWnd.l, uMsg.l, idEvent.l, dwTime.l)

Verfasst: 26.03.2008 23:55
von Kiffi
HeX0R hat geschrieben:Man sollte die TimerProc aber auch mit den richtigen Parametern deklarieren, sonst sucht man sich evtl. nen Wolf nach Programmabstürzen durch IMAs.
oh, verzeitung! Stimmt, da hast Du recht. :oops:

Grüße ... Kiffi