Aktuelle Zeit: 20.10.2019 11:16

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]




Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: Uhr
BeitragVerfasst: 11.09.2004 12:19 
Offline

Registriert: 29.08.2004 15:16
Hi,

ich hab ihr eine einfache uhr, die mir die Prozesslaufzeit anzeigen soll (d.h. wie lange der Prozess bereits läuft). Dafür zählt Sie einfach hoch. Das ganze funktioniert auch so. Das Problem was ich habe, besteht darin, das diese Uhr abhängig von meiner Prozessauslastung arbeitet. Soll bedeuten, habe ich eine starke Auslastung meines PC, zählt die Uhr nicht richtig, was zu verfälchten Ergebnissen führt, weil die Uhr mal stehen bleibt etc. Wie würdet ihr das ganze handhaben oder lässt sich sowas ganricht anderst regeln? Zudem stört mich die Nutzung von Sleep. Das muss auf jedenfall noch raus, da so der Prozess immer angehalten wird. Vielleicht könnt ihr mal euere Purebasic Augen drauf werfen :) Danke :)

Code:
Global sec,min,std

Procedure STOPUHR()
  sleep_(1000)
  sec=sec+1
 
  If sec=60
    sec=0
    min=min+1
    If min=60
      min=0
      std=std+1
    EndIf
  EndIf
 
  SetGadgetText(12,Str(std)+":"+Str(min)+":"+Str(sec))
 
EndProcedure

If OpenWindow(0, 100, 200, 195, 260, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget, "PureBasic Window")

  CreateGadgetList(WindowID(0))
  TextGadget(12,10,10,250,20,"")
 

 
  Repeat
    EventID.l = WindowEvent()

    If EventID = #PB_Event_CloseWindow  ; If the user has pressed on the close button
      Quit = 1
    EndIf
   
    ;Sleep_(1000)
   STOPUHR()
   

Until Quit = 1
 
EndIf

End

_________________
http://cnesm.de.vu/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 11.09.2004 12:42 
Offline
Benutzeravatar

Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Also ich würd das so in der Art versuchen:

Code:
Procedure STOPUHR()
  Static lasttime
  If lasttime = 0:lasttime = ElapsedMilliseconds():EndIf
  If ElapsedMilliseconds() - lasttime >= 1000
    lasttime + 1000
    sec=sec+1
   
    If sec=60
      sec=0
      min=min+1
      If min=60
        min=0
        std=std+1
      EndIf
    EndIf
   
    SetGadgetText(12,Str(std)+":"+Str(min)+":"+Str(sec))
  EndIf
 
EndProcedure

_________________
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 11.09.2004 16:28 
Offline

Registriert: 29.08.2004 03:25
Wohnort: Mittelerde, südlich der großen Grasplantagen
Wieso macht ihr es nicht so?
Code:
Procedure STOPUHR()
  SetGadgetText(12,FormatDate("%hh:%ii:%ss", Date()))
EndProcedure


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 11.09.2004 16:30 
Offline
Benutzeravatar

Registriert: 29.08.2004 08:37
Tibor hat geschrieben:
Wieso macht ihr es nicht so?
Code:
Procedure STOPUHR()
  SetGadgetText(12,FormatDate("%hh:%ii:%ss", Date()))
EndProcedure


Weil da die Systemzeit angezeigt wird und nicht die Zeit, seit dem der Prozess läuft.

_________________
Angenommen es gäbe einen Algorithmus mit imaginärer Laufzeit O(i * n), dann gilt O((i * n)^2) = O(-1 * n^2) d.h. wenn man diesen Algorithmus verschachtelt ist er fertig, bevor er angefangen hat.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 11.09.2004 16:32 
Offline

Registriert: 29.08.2004 03:25
Wohnort: Mittelerde, südlich der großen Grasplantagen
Ist mir 3 Sekunden vor deinem Postig auch aufgefallen.
Peinlich, peinlich... *schämt sich* :oops:


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 11.09.2004 17:47 
Offline
Ein Admin
Benutzeravatar

Registriert: 29.08.2004 20:20
Wohnort: Saarbrücken
Na dann macht man die Zeit ganz einfach abhängig von der Startzeit. Was ist daran so schwer:
Code:
Global sec.l, min.l, std.l, start.l

Procedure STOPUHR()
  Protected diff.l
  Static old_diff.l
 
  diff.l = (ElapsedMilliseconds() - start) / 1000
 
  If diff <> old_diff Or diff = 0
    old_diff = diff
   
    sec = diff % 60
    diff / 60
    min = diff % 60
    diff / 60
    std = diff
   
    SetGadgetText(12, Str(std) +  ":" + RSet(Str(min), 2, "0") + ":" + RSet(Str(sec), 2, "0"))
  EndIf
 
EndProcedure

; Timer starten
start = ElapsedMilliseconds()

If OpenWindow(0, 100, 200, 195, 260, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget, "PureBasic Window")

  If CreateGadgetList(WindowID(0))
    TextGadget(12,10,10,250,20,"")
   
    Repeat
      EventID.l = WindowEvent()
     
      If EventID = #PB_Event_CloseWindow  ; If the user has pressed on the close button
        Quit = 1
      EndIf
     
      Delay(10)
      STOPUHR()
    Until Quit = 1
  EndIf
EndIf

End

_________________
Neustes Video: Neje DK - 1 Watt Laser Engraver
Ubuntu Gnome 19.04 LTS x64, PureBasic 5.71 x64 (außerdem 4.41, 4.50, 4.61, 5.00, 5.10, 5.11, 5.21, 5.22, 5.30, 5.31, 5.40, 5.50, 5.60)
"Die deutsche Rechtschreibung ist Freeware, du darfst sie kostenlos nutzen – Aber sie ist nicht Open Source, d. h. du darfst sie nicht verändern oder in veränderter Form veröffentlichen."


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 11.09.2004 18:14 
Offline

Registriert: 29.08.2004 15:16
Hi,

ok sind gute Beispiel u. Kommentare dabei. Hätte jetzt noch ne Frage:

Da ich in Repeat eine Funktion habe, die nun eine hohe Auslastung hat, bleibt die Uhr doch auch stehen, weil der Prozess ja ganricht erst zur Procedure STOPUHR() kommt:

Code:
 Repeat
      EventID.l = WindowEvent()
     
      If EventID = #PB_Event_CloseWindow  ; If the user has pressed on the close button
        Quit = 1
      EndIf

      MeineFunktionMitVielProzessauslastung()     

      Delay(10)
      STOPUHR()
    Until Quit = 1

_________________
http://cnesm.de.vu/


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 11.09.2004 18:29 
Offline
Benutzeravatar

Registriert: 29.08.2004 00:16
Wohnort: Vorm Computer
Code:
Global StartTime

Procedure STOPUHR(hwnd.l,nIDEvent.l,uElapse.l,lpTimerFunc.l)
  Protected diff.l
  Static old_diff.l
  diff.l = (ElapsedMilliseconds() - StartTime) / 1000
 
  If diff <> old_diff Or diff = 0
    old_diff = diff
   
    sec = diff % 60
    diff / 60
    min = diff % 60
    diff / 60
    std = diff
   
    SetGadgetText(12, Str(std) +  ":" + RSet(Str(min), 2, "0") + ":" + RSet(Str(sec), 2, "0"))
  EndIf
EndProcedure

If OpenWindow(0, 100, 200, 195, 260, #PB_Window_SystemMenu | #PB_Window_MinimizeGadget | #PB_Window_MaximizeGadget, "PureBasic Window")
 
  StartTime = ElapsedMilliseconds()
  settimer_(WindowID(),1,200,@STOPUHR())

  If CreateGadgetList(WindowID(0))
    TextGadget(12,10,10,250,20,"")
   
    Repeat
      Repeat
        EventID.l = WindowEvent()
       
        If EventID = #PB_Event_CloseWindow  ; If the user has pressed on the close button
          quit = 1
        EndIf
      Until EventID = 0
     
      Delay(10)
    Until quit = 1
  EndIf
EndIf


Musst nur oft genug WindowEvent() aufrufen.

_________________
Bild
[url=irc://irc.freenode.org/##purebasic.de]irc://irc.freenode.org/##purebasic.de[/url]


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: 12.09.2004 13:03 
Offline

Registriert: 29.08.2004 15:16
Hi,

wow, das das so einfach geht :D

Ist echt klasse, das ihr so gut helfen könnt. Wäre echt augeschmissen, obwohl ich jetzt schon mehr als 6 jahre programmiere, hab ich keine Ahnung, was ich da überhaupt mache :) :roll:

_________________
http://cnesm.de.vu/


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 9 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde [ Sommerzeit ]


Wer ist online?

Mitglieder in diesem Forum: Google Adsense [Bot] und 5 Gäste


Sie dürfen keine neuen Themen in diesem Forum erstellen.
Sie dürfen keine Antworten zu Themen in diesem Forum erstellen.
Sie dürfen Ihre Beiträge in diesem Forum nicht ändern.
Sie dürfen Ihre Beiträge in diesem Forum nicht löschen.

Suche nach:
Gehe zu:  

 


Powered by phpBB © 2008 phpBB Group | Deutsche Übersetzung durch phpBB.de
subSilver+ theme by Canver Software, sponsor Sanal Modifiye