Im Hintergrund weiter arbeiten

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
MASH
Beiträge: 130
Registriert: 22.05.2005 17:43

Im Hintergrund weiter arbeiten

Beitrag von MASH »

Ich habe ein Fenster, welches arbeitet solange es aktiv ist. Wenn ich irgendwo anders draufklicke bleibt es stehen auch die Hauptschleife (Repeat Forever). Da eine Zeit gezählt wird muss es aber auch weiter laufen wenn es inaktiv ist. Und genau da ist das Problem!
Mit welchem Befehl ist das lösbar?
Danke Mark S.
Benutzeravatar
jear
Beiträge: 288
Registriert: 17.10.2004 01:59
Wohnort: Ammerland

Beitrag von jear »

Das Fenster bleibt "stehen" weil es keine Events mehr bekommt.
Wenn Dein Programm sich aber selbst per Timer Events generiert , dann kannst Du es damit die laufende Zeit darstellen und auch andere Dinge tun lassen.
Man ist nie zu alt zum lernen, auch wenn man dabei manchmal alt aussieht!
Christi
Beiträge: 154
Registriert: 31.08.2004 14:17
Kontaktdaten:

Beitrag von Christi »

WindowEvent()
Benutzeravatar
Tafkadasom2k5
Beiträge: 1578
Registriert: 13.08.2005 14:31
Kontaktdaten:

Beitrag von Tafkadasom2k5 »

Wenn du ein anderes Fenster öffnest und das alte soll aber noch "reaktionsfähig" sein-dann benutze "WindowEvent" und dann ein minimales Delay (um den Rechner ned voll auszulasten)..Ich weis nicht wie du deine Timer Routine gemacht hast, aber wenn diese auf Delays aufbaut, solltest du dir eine andere lösung ausdenken, weil sonst haste ja noch ne zusätzliche Verzögerung wenn du das nächste delay noch einbaust...

d.H.:
Du öffnest das 2te Fenster, machst WindowEvent() da hinein, und kopierst die ganze Timer-Routine da hinein.....und zusätzlich noch die Befehlslisten für das neue fenster....

Hoffe das war nicht zu kompliziert erklärt-wei-es ist ned kompliziert.. ^^
(Ich geb mir aber mühe)....

Gr33tz
Marc

P.s.: Wenn du deine Timer-Routine in eine prozedur packst gehts einfacher...
OpenNetworkConnection() hat geschrieben:Versucht eine Verbindung mit dem angegebenen Server aufzubauen. 'ServerName$' kann eine IP-Adresse oder ein voller Name sein (z.B.: "127.0.0.1" oder "ftp.home.net").
php-freak hat geschrieben:Ich hab die IP von google auch ned rausgefunden!
Benutzeravatar
MASH
Beiträge: 130
Registriert: 22.05.2005 17:43

Beitrag von MASH »

und auf was für ein WindowEvent() soll ich das Programm reagieren lassen?
Danke Mark S.
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8809
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag von NicTheQuick »

Also ich hätts so gemacht:

Code: Alles auswählen

Procedure BeepThread(a.l)
  Beep_(888, 100)
EndProcedure

If OpenWindow(0, 0, 0, 400, 300, #PB_Window_ScreenCentered | #PB_Window_SystemMenu | #PB_Window_MinimizeGadget, "TimerTest")
  Delay.l = 1000
  Time.l = ElapsedMilliseconds() + Delay
  Repeat
    If ElapsedMilliseconds() > Time
      Time + Delay
      CreateThread(@BeepThread(), 0)
    EndIf
    Select WindowEvent()
      Case #PB_EventCloseWindow
        Break
      Case 0
        Delay(1)
    EndSelect
  ForEver
EndIf
Allerdings ist der Code nicht für genaue Dinge gedacht, wenn man zwischenzeitlich das Fenster dauern minimiert und wiederherstellt.
Benutzeravatar
MASH
Beiträge: 130
Registriert: 22.05.2005 17:43

Beitrag von MASH »

Mit Theards geht es einfach nicht! Ich möchte den code unten ablaufen lassen wenn das fenster inaktiv ist aber es geht einfach nicht auch nicht über ein WindowEvent()???

Code: Alles auswählen

Procedure Close()
  For e = 0 To CountLaufwerke - 1
    If Laufwerk(e)\Status = 0
      If Date() >= Laufwerk(e)\CloseTime - 5 And Laufwerk(e)\CloseSoundTime = 0
        Laufwerk(e)\CloseSoundTime = 1        
        If CloseSound.s <> "Ausgeschaltet"
          If CloseSound.s < "3"
            PlaySound(Val(CloseSound.s))
          Else
            PlaySound(4)
          EndIf
        EndIf
      EndIf
      If Date() >= Laufwerk(e)\CloseTime
        UseCDAudio(e)
        EjectCDAudio(0)
        Laufwerk(e)\Status = 1
      EndIf
    EndIf
  Next e
EndProcedure
Danke Mark S.
Benutzeravatar
vonTurnundTaxis
Beiträge: 2130
Registriert: 06.10.2004 20:38
Wohnort: Bayreuth
Kontaktdaten:

Beitrag von vonTurnundTaxis »

Wird die Prozedur aufgerufen?

Ansonsten meinte Christi vermutlich, dass du anstatt von WaitWindowEvent() WindowEvent() verwenden sollst.
Nicht durch Zorn, sondern durch Lachen tötet man
ClipGrab | Pastor - jetzt mit kurzen URLs!
Christi
Beiträge: 154
Registriert: 31.08.2004 14:17
Kontaktdaten:

Beitrag von Christi »

vonTurnundTaxis hat geschrieben:Ansonsten meinte Christi vermutlich, dass du anstatt von WaitWindowEvent() WindowEvent() verwenden sollst.
Ja, das ist ein uriges Thema, mal sehn wieviele Threads es noch zu dieser "Problematik" geben wird.
Benutzeravatar
MASH
Beiträge: 130
Registriert: 22.05.2005 17:43

Beitrag von MASH »

Die Prozedur soll bei jedem Durchlauf der Haupt-Schleife "Repeat:Forever" aufgerufenw erden.
Danke Mark S.
Antworten