Seite 2 von 2

Re: PB in wikibooks -> ist folgendes korrekt?

Verfasst: 25.07.2012 17:21
von Pr0fessor
könnte mir dann noch jemand ein einfaches Bsp. geben indem es Sinn macht den timeout zu verwenden?

Re: PB in wikibooks -> ist folgendes korrekt?

Verfasst: 25.07.2012 17:41
von ts-soft
Man sollte besser einen Timer nehmen, in diesem Sinne macht dann ein Timeout auch nicht so viel Sinn,
aber wenn man z.B. unter Linux Threads verwendet, funktionieren diese nur, wenn ein Timeout vorgegeben ist.
Also: Unter Windows kannst Du statt eines Timeout besser einen Timer verwenden.

In diesem Sinne gibt es kein sinnvolles Beispiel. Es ist nur eine zusätzliche Möglichkeit, die wichtig war, bevor es die Timer in PB gab,
und die besser ist, als eine Schleife mit EventWindow() und Delay()

Gruß
Thomas

Re: PB in wikibooks -> ist folgendes korrekt?

Verfasst: 25.07.2012 17:51
von bobobo
trotzdem ein eher sinnloses Beispiel zur prinzipiellen Demonstration

Code: Alles auswählen

Enumeration
  #Window_0
EndEnumeration
Enumeration
  #Text_0
  #Button_0
EndEnumeration
Procedure Open_Window_0()
  If OpenWindow(#Window_0, 220, 16, 600, 300, "Zwerge",  #PB_Window_MinimizeGadget|#PB_Window_Invisible|#PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
    SetWindowState(#Window_0,#PB_Window_Minimize)
      TextGadget(#Text_0, 0, 20, 600, 40, "Hier steht was drin")
      ButtonGadget(#Button_0, 40, 70, 150, 40, "Schicht, genug getragen")
  EndIf
EndProcedure
c=2 ; wegen der Säcke
Open_Window_0()
SetWindowState(#Window_0,#PB_Window_Normal); mit windowinvisible s.o. und dem hier spart es mir so ca 1000 Kb in der Speicheranzeige des Taskmanagers
Repeat
  Event = WaitWindowEvent(900)
  WindowID = EventWindow()
  GadgetID = EventGadget()
  EventType = EventType() 
  If Event = #PB_Event_Gadget
    If GadgetID = #Button_0
      quit+1
    EndIf
  EndIf
  If ElapsedMilliseconds() > start+1000 ; Statt Timer , ich möchte nur
    c+1                                 ; alle 1000 msec eine Änderung
    HideWindow(#Window_0,0)             ; da es mir sonst zu schnell zuviele Zwerge werden. An die Eier gar nicht zu denken :)
    SetGadgetText(#Text_0,Str(c)+" Zwerge haben "+Str(c*2)+" Beine und tragen "+Str(c)+" Säcke mit " +Str(c*2)+" Eiern")
    start=ElapsedMilliseconds()
  EndIf
Until quit Or Event = #PB_Event_CloseWindow ; End of the event loop
End

Re: PB in wikibooks -> ist folgendes korrekt?

Verfasst: 25.07.2012 18:27
von Pr0fessor
ahh - dankesehr.

Es soll auch so sein dass die Zwerge mal schneller mal langsamer mehr werden?
denn es werden ja noch mehr events ausgelöst also die "0" vom timeout...

Re: PB in wikibooks -> ist folgendes korrekt?

Verfasst: 25.07.2012 19:15
von bobobo
Damit es nicht zu schnell zuviele Zwerge werden
habe ich ja den PseudoTimer eingebaut.

Mach den Mal raus und rutsch mit der Maus über das Fenster.
Dann werden es ganz schnell ganz viele Zwerge mit ganz vielen Säcken
und doppelt soviel Beinenund Eiern

Das der Pseudotimer prinzipiell etwas ungenau ist liegt an meinem Unvermögen
den Pseudo Timer richtig zu programmieren. Ist aber auch gar nicht nötig, PB
hat ja einen anständigen WindowTimer eingebaut den man für sowas benutzen sollte.
Und das sähe dann so aus

Code: Alles auswählen

Enumeration
  #Window_0
EndEnumeration
Enumeration
  #Text_0
  #Button_0
  #timer
EndEnumeration
Procedure Open_Window_0()
  If OpenWindow(#Window_0, 220, 16, 600, 300, "Zwerge",  #PB_Window_MinimizeGadget|#PB_Window_Invisible|#PB_Window_SystemMenu | #PB_Window_SizeGadget | #PB_Window_TitleBar )
    SetWindowState(#Window_0,#PB_Window_Minimize)
      TextGadget(#Text_0, 0, 20, 600, 40, "Hier steht was drin")
      ButtonGadget(#Button_0, 40, 70, 150, 40, "Schicht, genug getragen")
      AddWindowTimer(#Window_0,#timer,1000)
  EndIf
EndProcedure
c=2 ; wegen der Säcke
Open_Window_0()
SetWindowState(#Window_0,#PB_Window_Normal); mit windowinvisible s.o. und dem hier spart es mir so ca 1000 Kb in der Speicheranzeige des Taskmanagers
Repeat
  Event = WaitWindowEvent()
  WindowID   = EventWindow()
  GadgetID   = EventGadget()
  EventType  = EventType() 
  EventTimer = EventTimer()
  If Event = #PB_Event_Gadget
    If GadgetID = #Button_0
      quit+1
    EndIf
  EndIf
  If event=#PB_Event_Timer
    If EventTimer = #timer
      c+1
      SetGadgetText(#Text_0,Str(c)+" Zwerge haben "+Str(c*2)+" Beine und tragen "+Str(c)+" Säcke mit " +Str(c*2)+" Eiern")
    EndIf
  EndIf
Until quit Or Event = #PB_Event_CloseWindow ; End of the event loop
End

Re: PB in wikibooks -> ist folgendes korrekt?

Verfasst: 25.07.2012 20:10
von Pr0fessor
Dankesehr - jetzt ist alles klar^^

:bounce: