Makro bei Nichtaktivität starten???

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

arkadiuszpaluszek
****
Beiträge: 117
Registriert: So, 09.05.2010 09:53
Wohnort: Coburg
Kontaktdaten:

Makro bei Nichtaktivität starten???

Beitrag von arkadiuszpaluszek »

Hallo alle miteinander!

Habe ein auf den ersten Blick unlösbares Problem, aber vielleicht hat doch einer von Euch eine Idee???? :-)

Ich möchte, dass ein Makro startet wenn ich ca 30 Sek. nichts mehr in ein Formular eingetragen habe. Dieses Makro erhält dann nämlich die Verbindung zu meiner Web-DB aufrecht, während ich mir einen Kaffee koche, sonst hätte ich zwar einen Kaffee, aber beim Versuch weiterzuarbeiten bekomme ich die Meldung "MySQL Server has gone away" :)

Nun läuft das Makro bei mir im Hintergrund die ganze Zeit - was nicht ideal ist, weil es eben gut Ressourcen verbraucht. Allerdings kann ich bei Ereignissen so etwas wie "Dokument öffnen" oder "laden" oder was auch immer auswählen, dummerweise aber nicht "Programmierer kocht Kaffe und hat seit 30 Sek. nichts mehr gemacht". :)

Hat jemand von Euch irgendeinen Ansatz, irgendeine Idee??? Danke im Voraus!

Viele Grüße

Arek
F3K Total
********
Beiträge: 3720
Registriert: Mo, 28.02.2011 17:49

Re: Makro bei Nichtaktivität starten???

Beitrag von F3K Total »

Hallo Arek,
vielleicht kannst Du auf dein Formular unter "nach der Datensatzaktion" ein Makro legen, das 30s nichts tut (wait 30000) und danach ein weiteres Makro aufruft, das alle 30 s deine gewünschte Aktion ausführt (Do while loop).

Gruß R
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Makro bei Nichtaktivität starten???

Beitrag von Stephan »

Nun läuft das Makro bei mir im Hintergrund die ganze Zeit - was nicht ideal ist, weil es eben gut Ressourcen verbraucht.
Dann wäre es interessant zu wissen was das Makro tut und was zu diesem 'guten' (also hohen?) Rsssourcenverbrauch führt, denn ein normales 'Warte'-Makro dürfte das wohl kaum verursachen.
Hat jemand von Euch irgendeinen Ansatz, irgendeine Idee???
Normalerweise würde ich eine Do-Loop-Schleife mit Afrage einer Variable verwenden, definiere eine Variable, setze den Wert dieser Variable am Ende jeder durchgeführten Aktion:

Code: Alles auswählen

ZeitletzteAktion = TIMER()
(Wie Du das Setzen auslöst kommt auf die Gegebenheiten an.)

Frage permanennt den Variablenwert ab und starte ggf. Dein Makro, z.B.:

Code: Alles auswählen

Global ZeitletzteAktion
Global MakroStarten

'...
Do
  Do
    x = TIMER()-ZeitletzteAktion
    If x >=30 Then
      MakroStarten = 1
    End If
    Wait 100  
  Loop While MakroStarten <> 1
  DeinMakro()
  MakroStarten = 0
Loop
'...
wobei Du praktisch wohl noch etwas überlegen solltest um am Ende das äußere Do-Loopp zu verlassen, z.B. wieder durch abfrage einer Variable die bei Schliessen des Dokumnts auf einen spezifischen Wert gesetzt wird.


Am Rande:
Warum eigentlich müllst Du Deinen Betrag mit 3 völlig überflüssigen Smileys zu, die lediglich das Lesen erschweren weil sie vom Inhalt ablenken? Warum 3- und 4-fache Fragezeichen?



Gruß
Stephan
F3K Total
********
Beiträge: 3720
Registriert: Mo, 28.02.2011 17:49

Re: Makro bei Nichtaktivität starten???

Beitrag von F3K Total »

Hallo zusammen,
habe den Vorschlag von Stefan ausprobiert.
Funktioniert hervorragend.
Eine Zeile habe ich noch zugefügt, sonst rasselt "DeinMakro()" alle 100ms:
Do
Do
x = TIMER()-ZeitletzteAktion
If x >=30 Then
MakroStarten = 1
End If
Wait 100
Loop While MakroStarten <> 1
DeinMakro()
ZeitletzteAktion = TIMER()
MakroStarten = 0
Loop
Gruß R
Stephan
********
Beiträge: 12368
Registriert: Mi, 30.06.2004 19:36
Wohnort: nahe Berlin

Re: Makro bei Nichtaktivität starten???

Beitrag von Stephan »

Eine Zeile habe ich noch zugefügt, sonst rasselt "DeinMakro()" alle 100ms
Danke für die Korrektur.

Da ich Deine Ergänzung durchdacht habe, fällt mir jetzt noch ein Hinweis ein:
TIMER() fängt immer um Mitternacht wieder bei Null an, was dazu führt das es Probleme bei dem Makro geben kann wenn innerhalb des Zeitraumes indem es läuft Mitternacht liegt, es sollte reichen die Zeile:

Code: Alles auswählen

x = TIMER()-ZeitletzteAktion
zu ändern in:

Code: Alles auswählen

x = ABS(TIMER()-ZeitletzteAktion)


Gruß
Stephan
Antworten