Seite 1 von 1

Zeit soll gezählt werden ohne das Programm angehalten wird

Verfasst: 15.08.2005 14:01
von MASH
Wie kann man die Zeit Stoppen ohne das das ganze Programm angehalten wird?

Geht das nur über Theards?

Verfasst: 15.08.2005 14:02
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?

Verfasst: 15.08.2005 14:32
von Christi

Code: Alles auswählen

start.l = timegettime_()

Delay(1000)

Debug timegettime_() - start.l  ;timegettime_() ist viel genauer als ElapsedMilliseconds()

Verfasst: 15.08.2005 14:33
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  
 

Verfasst: 15.08.2005 15:07
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

Verfasst: 15.08.2005 15:15
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 
 

Verfasst: 15.08.2005 15:17
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)  

Verfasst: 15.08.2005 15:17
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

Verfasst: 15.08.2005 15:27
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