Frage! Wie kann man mir Pure Basic die SystemZeit auslesen?

Anfängerfragen zum Programmieren mit PureBasic.
Morpheus
Beiträge: 10
Registriert: 06.10.2005 11:51

Frage! Wie kann man mir Pure Basic die SystemZeit auslesen?

Beitrag von Morpheus »

Hallo an alle erstmal.

Also kann mir einer verraten wie man die Windows Systemzeit ausliest? Weil ich gerne einen Countdownzähler versuchen will zu Programmieren, habe aber keine Ahnung wie ich die Zeit auslese und auch nicht wo.

Bitte um eure Hilfe... :cry:

MfG
Morpheus
Benutzeravatar
Hroudtwolf
Beiträge: 1416
Registriert: 30.10.2004 23:33
Kontaktdaten:

Beitrag von Hroudtwolf »

debug GetTickCount_()
hiltwin
Beiträge: 311
Registriert: 06.10.2005 11:08
Wohnort: D-31177 Harsum
Kontaktdaten:

Ich arbeite auch gerade mit nem Countdown ...

Beitrag von hiltwin »

... zum Lernen hat mir dieses hier entsprechend geholfen ...

Code: Alles auswählen

; German forum: http://robsite.de/php/pureboard/viewtopic.php?t=3129&highlight=
; Author: MPERLE
; Date: 13. December 2003


; Programm TeeUhr - Erstes Programm in Purebasic 

If InitSound() = 0 
  MessageRequester("Fehler", "Fehler beim Soundinitialisieren!") 
  End 
EndIf 
 
If LoadSound(1, "erinner.wav") = 0 
  MessageRequester("Fehler", "Fehler beim Soundladen!") 
  End 
EndIf 
 
SoundVolume(1, 50) 


If OpenWindow(0,100,100,300,190,#PB_Window_SystemMenu|#PB_Window_MinimizeGadget|#PB_Window_ScreenCentered,"Die Teeuhr") 
  

  If CreateGadgetList(WindowID()) 
    ButtonGadget(1,10,160,80,20,"Start") 
    ButtonGadget(2,110,160,80,20,"Stop") 
    ButtonGadget(3,210,160,80,20,"Beenden") 
    SpinGadget  (4,20,20,50,26,1,30) 
    SetGadgetState (4,1) 
    SetGadgetText(4,"1") 
    TextGadget(5,80,20,200,26,"Wieviele Minuten soll Ihr Tee ziehen? (1-30 Minuten)") 
    If LoadImage(11, "TeeUhr.bmp") 
      ImageGadget(7,100,60,100,83,UseImage(11)) 
    EndIf 
    If LoadImage(12, "Teetasse.bmp") 
      ImageGadget(7,10,60,100,83,UseImage(12)) 
    EndIf 
    TextGadget(8,140,110,100,20,"Countdown wartet ...",#PB_Text_Center) 
    Frame3DGadget(0,10,5,280,50,"") 
    Frame3DGadget(0,10,55,280,100,"") 
  EndIf 
  
  Repeat 
    EventID = WaitWindowEvent()                                   ;Fenster-Events abfragen 
    If EventID = #PB_Event_CloseWindow                            ;Wenn ... 
      Quit = 1 
    EndIf 
    HideGadget(2,1) 
    If EventID = #PB_Event_Gadget                                 ;Gadget-Events abfragen 
      If EventGadgetID()=1                                        ;Button "Start" gedrückt 
        HideGadget(1,1) 
        HideGadget(3,1) 
        HideGadget(2,0) 
        CountDown = GetGadgetState(4) *60 
        ProgressBarGadget(9,100,130,180,15,1,CountDown,#PB_ProgressBar_Smooth) 
        
        SendMessage_(GadgetID(9),#CCM_SETBKCOLOR,0,RGB(60,50,0))  ;  Hintergrundfarbe im ProgressBarGadget ändern 
        SendMessage_(GadgetID(9),#WM_USER+9,0,RGB(181,49,16)) 
        SetGadgetState(9,CountDown) 
         Time = GetTickCount_() + CountDown * 1000 
        Repeat 
          WindowEvent() 
          If (Time - GetTickCount_()) / 1000 < CountDown 
            CountDown - 1 
            SetGadgetText(8,FormatDate("%ii:%ss",CountDown)+ " Minuten") 
            SetGadgetState(9,CountDown) 
            SetWindowText_(WindowID(0),GetGadgetText(8)) 
          EndIf 
        Until CountDown = 0 Or EventGadgetID()=2 
        ; Meldung anzeigen 
        PlaySound(1, 0) 
        MessageRequester("Die Teeuhr","It's Teatime!",0) 
        SetGadgetText(8,"Countdown wartet ...") 
        SetGadgetState (4,1) 
        SetGadgetText(4,"1") 
        HideGadget(9,1) 
        SetGadgetState(9,0) 
        HideGadget(1,0) 
        HideGadget(3,0) 
        SetWindowText_(WindowID(0),"Die Teeuhr") 
      EndIf 
       If EventGadgetID()=3            ;Button "Beenden" gedrückt 
        Quit=1 
      EndIf 
      If EventGadgetID()=4 
        SetGadgetText(4,Str(GetGadgetState(4))) 
        WindowEvent()      
      EndIf 
    EndIf 
    
  Until Quit = 1 
EndIf 
End
; ExecutableFormat=Windows
; FirstLine=1
; EnableXP
; DisableDebugger
; EOF
Benutzeravatar
Froggerprogger
Badmin
Beiträge: 855
Registriert: 08.09.2004 20:02

Beitrag von Froggerprogger »

Wenn Du Zeitabstände messen willst, dann nimm einfach ElapsedMilliseconds(), das ist eine PB-Funktion und macht dasselbe wie GetTickCount_(). Der zurückgegebene Wert sind die seit dem Start des Computers vergangenen Millisekunden, also nicht die Systemzeit. Die Funktionen sind aber schön schnell, also wenn man Zeitabstände braucht, wie z.B. dass etwas nach 5 Minuten passiert, etc. die richtige Wahl.

Die echte Systemzeit erhält man mit der WinAPI-Funktion GetLocalTime_(), siehe folgendes Beispiel:

Code: Alles auswählen

GetLocalTime_(@time.SYSTEMTIME)
debug Str(time\wYear) + " (Jahr)"
debug Str(time\wMonth) + " (Monat)"
debug Str(time\wDayOfWeek) + " (Wochentag)"
debug Str(time\wDay) + " (Tag im Monat)"
debug Str(time\wHour) + " (Stunde)"
debug Str(time\wMinute) + " (Minute)"
debug Str(time\wSecond) + " (Sekunde)"
debug Str(time\wMilliseconds) + " (Millisekunde)"
!UD2
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 »

Froggerprogger hat geschrieben:Die echte Systemzeit erhält man mit der WinAPI-Funktion GetLocalTime_(), siehe folgendes Beispiel:

Code: Alles auswählen

GetLocalTime_(@time.SYSTEMTIME)
debug Str(time\wYear) + " (Jahr)"
debug Str(time\wMonth) + " (Monat)"
debug Str(time\wDayOfWeek) + " (Wochentag)"
debug Str(time\wDay) + " (Tag im Monat)"
debug Str(time\wHour) + " (Stunde)"
debug Str(time\wMinute) + " (Minute)"
debug Str(time\wSecond) + " (Sekunde)"
debug Str(time\wMilliseconds) + " (Millisekunde)"
Oder mit [c]Date()[/c].
Benutzeravatar
Froggerprogger
Badmin
Beiträge: 855
Registriert: 08.09.2004 20:02

Beitrag von Froggerprogger »

:iamwithstupid:

Jau, oder mit Date().
Oder bei Obi.
!UD2
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Bei der Lösung mit Date() müßte der gesamte Thread ja wieder verschoben werden, ist ja kein API-Befehl :mrgreen:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
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 »

Wieso? Wir sind doch bei den Anfängern?
Oder war der Thread vorher noch unter "API"?

Naja, egal... :wink:
Benutzeravatar
freedimension
Admin
Beiträge: 1987
Registriert: 08.09.2004 13:19
Wohnort: Ludwigsburg
Kontaktdaten:

Beitrag von freedimension »

NicTheQuick hat geschrieben:Wieso? Wir sind doch bei den Anfängern?
Oder war der Thread vorher noch unter "API"?
Ich glaube den hat ein kleiner Wichtel der gerade nichts besseres zu tun hatte verschoben.

Mein Problem ist immer, dass ich stets über "Beiträge seit dem letzten Besuch anzeigen" in die jeweiligen Threads gelange und mir daher nie so richtig bewusst ist in welchem Forum ich gerade unterwegs bin :(
Beginne jeden Tag als ob es Absicht wäre!
Bild
BILDblog
Antworten