Seite 1 von 1

2 mal Schleife behindern sich, was kann man tun?

Verfasst: 30.06.2008 21:31
von Ractur
Hallo,

ich habe 2 Schleifen, eine Repeat Schleife die feststellt wie lange der Benutzer "IDLE" ist

Code: Alles auswählen

Repeat
container = IdleTime()
container/1000
   Debug container
   PrintN(Str(container))
   Delay(1000)
Until Left(Inkey(),1) = Chr(27)
und danach folgt die nächste Schleife, und zwar:

Code: Alles auswählen

Repeat
EventID = WaitWindowEvent()!
.............
ForEver
Allerdings behindert die eine Schleife nun die andere, was klar ist irgendwie. Allerdings frag ich mich wie ich das nun am besten Löse?

Soll ich 2 Programme draus machen? Oder kann man das andere als Quasi anderen Task ablaufen lassen? Oder gibt es die Möglichkeit die Schleifen "miteinander" zu "verbinden" keine Ahnung. Bin im Moment bisschen Ratlos, würde mich über einen Tip freuen.

Danke!

Verfasst: 30.06.2008 21:32
von marco2007
Such mal Thread in der Hilfe.

Verfasst: 30.06.2008 22:07
von Ractur
Danke marco2006 das hat mir prima weitergeholfen :) :D

Re: 2 mal Schleife behindern sich, was kann man tun?

Verfasst: 01.07.2008 06:59
von Danilo
Ractur hat geschrieben:Oder gibt es die Möglichkeit die Schleifen "miteinander" zu "verbinden" keine Ahnung.
Ich weiß nicht was Deine Funktion IdleTime() macht, aber hier mal ein
Beispiel wie man die 2 Schleifen zusammensetzen könnte.
In dem Beispiel benutze ich mal "idle" für den Zustand das keine
Fensterereignisse stattfinden, nur zur Demonstration. In Wirklichkeit
ist das ja nicht idle. "User idle" wäre wohl eher wenn keine Mausbewegungen
und -klicks sowie keine Tastatureingaben stattfinden.

Mit folgenden Pseudocode könntest Du ausrechnen wie lange die
Zeit zwischen den Ereignissen war. Dazwischen kannst Du aber
durch WaitWindowEvent() nichts machen.

Code: Alles auswählen

Repeat
  Datum1  = Date()
  EventID = WaitWindowEvent()
  Datum2  = Date()
  ; ausrechnen wieviel Zeit kein Event stattfand
ForEver
Die zweite Methode ist dann mit WindowEvent() ohne das Wait:

Code: Alles auswählen

Repeat
  EventID = WindowEvent()
  If Not EventID ; kein Event stattgefunden
    ; erhöhe internen idle-timer, z.b. auch mit Date() sekunden berechnen
    ; machwas mit dem wert
    Delay(20) ; kleine verzögerung, die nur aufgerufen wird wenn *kein*
              ; Ereigniss stattfand, sonst natürlich keine Verzögerung
  Else
    ; Ereignis stattgefunden, idle-timer auf 0 zurücksetzen
    Select EventID
      Case #PB_Event_CloseWindow
        break ; ForEver-Schleife beenden
    EndSelect
  EndIf
ForEver
Wie gesagt, das ist nur zur Demonstration wie man das zusammenlegen
könnte. Um herauszufinden wie lange der User nichts macht, mußt Du dann
halt die globale Mausposition und Tastatureingaben überprüfen.

Verfasst: 01.07.2008 14:05
von Kaeru Gaman
...für tatsächliches UserIdle gibt es die API LastInputInfo...