PB in wikibooks -> ist folgendes korrekt?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
Pr0fessor
Beiträge: 40
Registriert: 21.07.2011 16:13
Computerausstattung: Intel Qore2Quad Q6600, 4GB RAM, Radeon HD 5770, Windows 8.1 Pro 64bit
Wohnort: Hagenow
Kontaktdaten:

Re: PB in wikibooks -> ist folgendes korrekt?

Beitrag von Pr0fessor »

könnte mir dann noch jemand ein einfaches Bsp. geben indem es Sinn macht den timeout zu verwenden?
~ PureBasic 5.21 LTS x86 | PureBasic 5.21 LTS x64 | Windows 8.1 Pro with Media Center x64 ~
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

Re: PB in wikibooks -> ist folgendes korrekt?

Beitrag 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
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
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Re: PB in wikibooks -> ist folgendes korrekt?

Beitrag 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
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Benutzeravatar
Pr0fessor
Beiträge: 40
Registriert: 21.07.2011 16:13
Computerausstattung: Intel Qore2Quad Q6600, 4GB RAM, Radeon HD 5770, Windows 8.1 Pro 64bit
Wohnort: Hagenow
Kontaktdaten:

Re: PB in wikibooks -> ist folgendes korrekt?

Beitrag 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...
~ PureBasic 5.21 LTS x86 | PureBasic 5.21 LTS x64 | Windows 8.1 Pro with Media Center x64 ~
Benutzeravatar
bobobo
jaAdmin
Beiträge: 3873
Registriert: 13.09.2004 17:48
Kontaktdaten:

Re: PB in wikibooks -> ist folgendes korrekt?

Beitrag 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
‮pb aktuel 6.2 windoof aktuell und sowas von 10
Ich hab Tinnitus im Auge. Ich seh nur Pfeifen.
Benutzeravatar
Pr0fessor
Beiträge: 40
Registriert: 21.07.2011 16:13
Computerausstattung: Intel Qore2Quad Q6600, 4GB RAM, Radeon HD 5770, Windows 8.1 Pro 64bit
Wohnort: Hagenow
Kontaktdaten:

Re: PB in wikibooks -> ist folgendes korrekt?

Beitrag von Pr0fessor »

Dankesehr - jetzt ist alles klar^^

:bounce:
~ PureBasic 5.21 LTS x86 | PureBasic 5.21 LTS x64 | Windows 8.1 Pro with Media Center x64 ~
Antworten