Zeit messen im Programm

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
duli
Beiträge: 75
Registriert: 17.04.2007 11:39

Beitrag von duli »

:mrgreen: Hallo PureLust und Kaeru

Ich hoffe die vom Forum werden mir nicht böse wenn ich immer so viel Code hier reinstelle. Aber ich weiss manchmal einfach nicht genau, was den nun wie wo wichtig ist.

Habe nun zur Verdauung angesetzt und meine verstanden zu haben was ihr geschrieben habt. (was für eine grössenwahnsinn).

Ich finde die Lösung in einem Threat gut. Habe nachgelesen in der Hilfe um was es geht, und sehe das es in grösseren Projekten mit viel Vorsicht zu geniessen ist, wegen dem Speicher und Timingmanagment. Jedoch hier ist es ganz nett so. Eigentlich habe ich mich wegen der Übersichtlichkeit für die Threat Variante entschieden, oder einach aus neugier und den Ansporn als Anfänger auch was komplizierteres verstehen zu können, wer weiss schon genau was in einem Männerhirn alles so geanu abgeht. :roll:

Danke PureLust für dein Erklärungen wegen den Prozeduren, das hat mir doch was Licht ins Dunkle gegeben.

So nun hier der versprochene Code

Code: Alles auswählen

; Mit Eneumeritation wird den Konstanten eine Fortlaufende Nummer vergeben anstelle dies von Hand zu machen.

Enumeration ; hier kommen alle Windows rein
  #MainWindow
EndEnumeration
 
Enumeration ; hier kommen alle Menüitems rein
  #neu
EndEnumeration

Enumeration ; hier kommen alle Gadgets rein
  #StringZahl1
  #StringZahl2
  #StringZahl3
  #StringErgebnis
  #RichtigOderFalschText
  #AnzahlRichtigeText
  #AnzahlRichtigeWert
  #AnzahlFalscherText
  #AnzahlFalscherWert
  #AktuelleDauer
EndEnumeration





Anzahl_Richtig = 0
Anzahl_Falsche = 0
t_start = ElapsedMilliseconds()

Procedure Zeit_Updaten(Dummy)
   Shared t_start
   Repeat
      laufzeit_jetzt = ElapsedMilliseconds() - t_start
      SetGadgetText(#AktuelleDauer, "Laufzeit:" + Str(laufzeit_jetzt/1000) + "s")
      Delay(1000)
   ForEver
EndProcedure

Procedure FillGadget()
  SetGadgetText(#StringZahl1,Str(Random(10)))
  SetGadgetText(#StringZahl2,Str(Random(10)))
  SetGadgetText(#StringZahl3,"")
EndProcedure


Procedure rechne()
 
  val1.s = GetGadgetText(#StringZahl1)
  val2.s = GetGadgetText(#StringZahl2)
  result = Val(val1)*Val(val2)
  SetGadgetText(#StringErgebnis,Str(result))
  
  If result = Val(GetGadgetText(#StringZahl3))
    ProcedureReturn #True
  EndIf
 
EndProcedure


If OpenWindow(#MainWindow,0,0,200,400,"Taschenrechner",#PB_Window_ScreenCentered | #PB_Window_SystemMenu | #PB_Window_MinimizeGadget)
 
  If CreateGadgetList(WindowID(#MainWindow))
      
;     TextGadget(#PB_Any, 0, 10, 100, 20, "Erste Zahl")
   
    TextGadget(#StringZahl1,20,30,20,20,Str(Random(10)))    
   
    TextGadget(#PB_Any, 41, 30, 20, 20, "*")
   
    TextGadget(#StringZahl2,60,30,100,20,Str(Random(10)))   
    
    TextGadget(#PB_Any, 0, 70, 150, 20, "Resultat eingeben")
   
    StringGadget(#StringZahl3,0,90,100,20,"",#PB_String_Numeric)   
    
    TextGadget(#PB_Any, 0, 120, 150, 20, "Neue Rechnung mit Enter")
    
    TextGadget(#RichtigOderFalschText, 0, 140, 150, 40, "")
    
    TextGadget(#StringErgebnis,160,140,100,20,"")
    
    TextGadget(#AnzahlRichtigeText, 0, 180, 150, 20, "Anzahl Richtige")
            
    TextGadget(#AnzahlRichtigeWert, 160, 180, 30, 20, "")
    
    TextGadget(#AnzahlFalscherText, 0, 200, 150, 20, "Anzahl Falsche")
            
    TextGadget(#AnzahlFalscherWert, 160, 200, 30, 20, "")
    
    TextGadget(#AktuelleDauer, 0, 230, 150, 20, "Laufzeit: " + Str(laufzeit_jetzt/1000) + "s")
    
    AddKeyboardShortcut(#MainWindow,#PB_Shortcut_Return,#neu)
    
    SetActiveGadget(#StringZahl3)
    
    CreateThread(@Zeit_Updaten(),0)
    
  EndIf
EndIf


Repeat
  EventID = WaitWindowEvent()

  Select EventID

    Case #PB_Event_Menu
      If EventMenu() = #neu       

          If rechne()
            Anzahl_Richtig = Anzahl_Richtig +1             
            SetGadgetText(#RichtigOderFalschText, "Richtig das Resultat war")
            SetGadgetText(#AnzahlRichtigeWert, Str(Anzahl_Richtig))
            
          Else
          
            Anzahl_Falsch = Anzahl_Falsch +1
            SetGadgetText(#RichtigOderFalschText, "Aber aber so was auch, das richtige Resultat lautet")
            SetGadgetText(#AnzahlFalscherWert,Str(Anzahl_Falsch))
          EndIf
          
        FillGadget() 
        SetActiveGadget(#StringZahl3) 
      EndIf

    Case #PB_Event_CloseWindow
      End
     
    Case #PB_Event_Gadget

  EndSelect
 Until EventID = #PB_Event_CloseWindow
End 
Man kann nicht wissen was man nicht weiss..
Antworten