Thread vohrzeitieg benden ?

Anfängerfragen zum Programmieren mit PureBasic.
Kratermonster
Beiträge: 22
Registriert: 20.03.2008 20:15

Thread vohrzeitieg benden ?

Beitrag 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
---------------------------------------
Sry Bin legesteniker...
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: Thread vohrzeitieg benden ?

Beitrag 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
a²+b²=mc²
Kratermonster
Beiträge: 22
Registriert: 20.03.2008 20:15

Beitrag 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
---------------------------------------
Sry Bin legesteniker...
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag 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
a²+b²=mc²
Kratermonster
Beiträge: 22
Registriert: 20.03.2008 20:15

ähm ?

Beitrag von Kratermonster »

öhm jetzt zählt er aber nicht meher ? naja von 5 auf 4 aber das wars ?
mfg duc
---------------------------------------
Sry Bin legesteniker...
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag 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.
Kratermonster
Beiträge: 22
Registriert: 20.03.2008 20:15

Beitrag 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...
---------------------------------------
Sry Bin legesteniker...
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: ähm ?

Beitrag 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
a²+b²=mc²
Benutzeravatar
HeX0R
Beiträge: 3042
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win11 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2 + 3
Kontaktdaten:

Beitrag 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)
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag 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
a²+b²=mc²
Antworten