Event = WaitWindowEvent(1) im Thread.

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Event = WaitWindowEvent(1) im Thread.

Beitrag 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.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
xXRobo_CubeXx
Beiträge: 120
Registriert: 12.06.2015 16:08
Computerausstattung: Version 5.41 LTS
Wohnort: Wohnort
Kontaktdaten:

Re: Event = WaitWindowEvent(1) im Thread.

Beitrag 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?
Version 5.41 LTS :)
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Event = WaitWindowEvent(1) im Thread.

Beitrag von RSBasic »

Es ist kein Problem, mehrere Events manuell auf einmal auszulösen. Delay() brauchst du nicht.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
xXRobo_CubeXx
Beiträge: 120
Registriert: 12.06.2015 16:08
Computerausstattung: Version 5.41 LTS
Wohnort: Wohnort
Kontaktdaten:

Re: Event = WaitWindowEvent(1) im Thread.

Beitrag von xXRobo_CubeXx »

Und wen ich wie funheld ein Timeout Wert bei WaitWindowEvent einsetze, welche Zahl ist sinnvoll? Was nimmt ihr immer? :)
Version 5.41 LTS :)
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Event = WaitWindowEvent(1) im Thread.

Beitrag 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.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
xXRobo_CubeXx
Beiträge: 120
Registriert: 12.06.2015 16:08
Computerausstattung: Version 5.41 LTS
Wohnort: Wohnort
Kontaktdaten:

Re: Event = WaitWindowEvent(1) im Thread.

Beitrag 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?
Version 5.41 LTS :)
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Event = WaitWindowEvent(1) im Thread.

Beitrag von RSBasic »

Weil das nicht notwendig ist. Dafür hast du WaitWindowEvent(), um auf das nächste Event zu warten.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
xXRobo_CubeXx
Beiträge: 120
Registriert: 12.06.2015 16:08
Computerausstattung: Version 5.41 LTS
Wohnort: Wohnort
Kontaktdaten:

Re: Event = WaitWindowEvent(1) im Thread.

Beitrag von xXRobo_CubeXx »

Was is wen ich bei WaitWindowEvent 10000 eingebe? Werden die Button Klicks erst nach 10000 Miliseks abgefragt? Also verzögert? :|
Version 5.41 LTS :)
Benutzeravatar
mhs
Beiträge: 224
Registriert: 11.01.2009 16:30
Wohnort: Graben
Kontaktdaten:

Re: Event = WaitWindowEvent(1) im Thread.

Beitrag 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.
Michael Hack

Michael Hack Software :: Softwareentwicklung | Webentwicklung | IT-Dienstleistungen
www.michaelhacksoftware.de :: www.mh-s.de :: www.michael-hack.de
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Event = WaitWindowEvent(1) im Thread.

Beitrag 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.
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Antworten