Zeit soll gezählt werden ohne das Programm angehalten wird

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
MASH
Beiträge: 130
Registriert: 22.05.2005 17:43

Zeit soll gezählt werden ohne das Programm angehalten wird

Beitrag von MASH »

Wie kann man die Zeit Stoppen ohne das das ganze Programm angehalten wird?

Geht das nur über Theards?
Danke Mark S.
Benutzeravatar
zigapeda
Beiträge: 1753
Registriert: 06.03.2005 17:22
Wohnort: Kaufbeuren
Kontaktdaten:

Beitrag von zigapeda »

wie meinst du zählen/stoppen?
meinst du so wie bei einer stopuhr das du auf einen knopf drückst für start und dann wieder auf einem knopf stoppen kannst?
kluger Mann + kluge Frau = Romanze | dummer Mann + dumme Frau = Schwangerschaft
kluger Mann + dumme Frau = Affäre | dummer Mann + kluge Frau = Shopping <)
Christi
Beiträge: 154
Registriert: 31.08.2004 14:17
Kontaktdaten:

Beitrag von Christi »

Code: Alles auswählen

start.l = timegettime_()

Delay(1000)

Debug timegettime_() - start.l  ;timegettime_() ist viel genauer als ElapsedMilliseconds()
Benutzeravatar
Hroudtwolf
Beiträge: 1416
Registriert: 30.10.2004 23:33
Kontaktdaten:

Beitrag von Hroudtwolf »

Code: Alles auswählen

;Hroudtwolf
;PB-Club.de
;Countdown Pieper

#Sekunde=1000

If OpenWindow(0, 0, 0, 100, 100, #PB_Window_SystemMenu|#pb_window_screencentered, "Countdown Beep")

  
  Repeat
    EventID.l = WindowEvent()
    ImMoment.l=GetTickCount_()
    If darfzaehlen.l=0:Startzeit.l=GetTickCount_()+#Sekunde:darfzaehlen.l=1:EndIf 
    If darfzaehlen.l=1 And ImMoment.l>Startzeit.l
      Beep_(1000,20):Beep_(900,20):  Beep_(800,20)
      darfzaehlen.l=0
    EndIf 
    
  Delay(5); Muss rein (CPU-Last senken)
  Until  EventID = #PB_Event_CloseWindow  
  
EndIf

End  
 
Benutzeravatar
MASH
Beiträge: 130
Registriert: 22.05.2005 17:43

Beitrag von MASH »

Also ich habe mich villeicht ein wenig schlecht ausgedrückt

Ich meinte wenn das programm in der hauptschleife läuft soll di hauptschleife nicht angehalten werden da ja sonst z.B. oben bei windows im fenster "Keine Rückmeldung" erscheint.

Jetzt möchte ich eine bestimmte zeit abstoppen. Wenn die Zeit vorbei ist soll etwas bestimmtes geschehen.

Aber ich möchte das Programm ganz normal fortsetzen
Danke Mark S.
Benutzeravatar
Hroudtwolf
Beiträge: 1416
Registriert: 30.10.2004 23:33
Kontaktdaten:

Beitrag von Hroudtwolf »

Nach 10 Sekunden passiert was.

Code: Alles auswählen

;Hroudtwolf
;PB-Club.de
;Countdown Pieper

#Sekunde=1000
Countdown=10; Sekunden

If OpenWindow(0, 0, 0, 100, 100, #PB_Window_SystemMenu|#pb_window_screencentered, "Countdown Beep")

 
  Repeat
    EventID.l = WindowEvent()
    ImMoment.l=GetTickCount_()
    If darfzaehlen.l=0:Startzeit.l=GetTickCount_()+#Sekunde:darfzaehlen.l=1:EndIf
    If darfzaehlen.l=1 And ImMoment.l>Startzeit.l
      Beep_(1000,20):Beep_(900,20):  Beep_(800,20)
      Countdown-1
      darfzaehlen.l=0
    EndIf
   If Countdown=0
      For x=1 To 1000 Step 10
         Beep_(1000+x,20)
      Next x
   Countdown=10  
   EndIf 
  Delay(5); Muss rein (CPU-Last senken)
  Until  EventID = #PB_Event_CloseWindow 
 
EndIf

End 
 
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 »

Meinste vielleicht sowas:

Code: Alles auswählen

If OpenWindow(0, 100, 200, 195, 260, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget, "Windows Timer")
  Timer = SetTimer_(WindowID(), 1, 10000, 0)
  Repeat
    EventID.l = WaitWindowEvent()
    Select EventID
      Case #PB_Event_CloseWindow 
        Quit = 1
      Case #WM_TIMER
        Debug "Es ist Zeit"
    EndSelect
  Until Quit = 1
  
EndIf

KillTimer_(WindowID(), Timer)  
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
Kiffi
Beiträge: 10719
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

> Jetzt möchte ich eine bestimmte zeit abstoppen. Wenn die Zeit vorbei ist
> soll etwas bestimmtes geschehen.

schau Dir mal die Timer-Funktionen der PBOSL an.

Code: Alles auswählen

StartTimer( #DeinTimer , MilliSec , @MachWas() )

Grüße ... Kiffi
a²+b²=mc²
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 »

Die Funktion aus der PBOSL liefert eine größere Genauigkeit als der einfach API-Timer. Ansonsten funktionieren sie gleich! Kommt also auf den Anwendungsfall an was Du verwenden solltest
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
Antworten