Seite 2 von 3

Re: Event = WaitWindowEvent(1) im Thread.

Verfasst: 20.04.2016 13:14
von RSBasic
@xXRobo_CubeXx
Du kannst das von WaitWindowEvent() zurückgegebene Event problemlos in eine Variable speichern. Diese Variable kannst du beliebig oft auswerten.
Wenn du das nicht machst und die WaitWindowEvent-Funktion trotzdem mehrfach aufrufst, dann kann es passieren, dass bestimmte Events verschluckt werden bzw. verloren gehen, weil das gerade ausgelöste Event in einer falschen Zeile ausgewertet wurde, das aber in der anderen Zeile ausgewertet werden sollte.

Re: Event = WaitWindowEvent(1) im Thread.

Verfasst: 20.04.2016 13:25
von xXRobo_CubeXx
Ja so kann man das auch machen, thx Nick und RS :)
Frage zu Postevent hab ich auch noch... :D Kann ich auch mehrere Postevent im Threat hintereinander gleichzeitig abfeuern? In meinen Beispiel geht es zwar aber ist das zuverlässig oder muss man vorsichthalber Delays zwischendrin einbauen das alle Events ankommen?

Re: Event = WaitWindowEvent(1) im Thread.

Verfasst: 20.04.2016 13:28
von RSBasic
Es ist kein Problem, mehrere Events manuell auf einmal auszulösen. Delay() brauchst du nicht.

Re: Event = WaitWindowEvent(1) im Thread.

Verfasst: 20.04.2016 13:44
von xXRobo_CubeXx
Und wen ich wie funheld ein Timeout Wert bei WaitWindowEvent einsetze, welche Zahl ist sinnvoll? Was nimmt ihr immer? :)

Re: Event = WaitWindowEvent(1) im Thread.

Verfasst: 20.04.2016 13:53
von RSBasic
Kommt drauf an, wie oft deine Schleife in einer Sekunde abgearbeitet werden soll und wie wichtig die Auswertung deiner Events sind. Wenn du Timeout brauchst, kannst du z.B. 100 nehmen. Das sollte ausreichen.
Wenn du aber beispielsweise während der Laufzeit was zeichnen möchtest, dann nimm 10, falls 100 Millisekunden zu lang sind.

Re: Event = WaitWindowEvent(1) im Thread.

Verfasst: 20.04.2016 14:04
von xXRobo_CubeXx
Aso, ich probiers mal aus... thx :)
Ich hab irgend wo gelesen das man im Loop kein Delay nutzen sollte. Warum eigentlich nicht?

Re: Event = WaitWindowEvent(1) im Thread.

Verfasst: 20.04.2016 14:05
von RSBasic
Weil das nicht notwendig ist. Dafür hast du WaitWindowEvent(), um auf das nächste Event zu warten.

Re: Event = WaitWindowEvent(1) im Thread.

Verfasst: 20.04.2016 14:17
von xXRobo_CubeXx
Was is wen ich bei WaitWindowEvent 10000 eingebe? Werden die Button Klicks erst nach 10000 Miliseks abgefragt? Also verzögert? :|

Re: Event = WaitWindowEvent(1) im Thread.

Verfasst: 20.04.2016 14:20
von mhs
Wenn du bei WaitWindowEvent ein Timeout angibst, wird gewartet bis ein Event auftritt oder das Timeout abgelaufen ist. D.h. wenn du einen Button drückst, wird sofort das Event abgearbeitet und das Timeout ist hinfällig.

Re: Event = WaitWindowEvent(1) im Thread.

Verfasst: 20.04.2016 14:23
von RSBasic
Nein, wie der Parametername schon sagt, ist das nur ein Timeout. Die Funktion wartet maximal x Millisekunden.
Wenn in der Zwischenzeit bereits ein Event ausgelöst wurde, dann wird die Schleife sofort fortgesetzt. Der Timeout-Wert ist nur dazu da, wenn überhaupt keine Events stattfinden.
Du kannst das ganz leicht selber testen:

Code: Alles auswählen

EnableExplicit

If OpenWindow(0, 0, 0, 500, 400, "Window", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
  
  Repeat
    Select WaitWindowEvent(3000)
      Case #PB_Event_CloseWindow
        End
    EndSelect
    Debug "Durchlauf..."
  ForEver
EndIf
Am Anfang gibt es gleich mehrere Events. Das ist normal, aber wenn du innerhalb deines Fensters die Maus nicht bewegst, dann gibt es immer erst nach 3 Sekunden einen Durchlauf.
Wenn du die Maus bewegst oder was anderes mit dem Fenster machst, dann gibt es automatisch neue Events und die Funktion "WaitWindowEvent()" hört auf zu warten und es gibt einen Durchlauf.