AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Warten bis der OnIdle-Eventhandler fertig ist
Thema durchsuchen
Ansicht
Themen-Optionen

Warten bis der OnIdle-Eventhandler fertig ist

Ein Thema von TStringlist · begonnen am 13. Mai 2004 · letzter Beitrag vom 13. Mai 2004
Antwort Antwort
TStringlist

Registriert seit: 1. Dez 2003
360 Beiträge
 
Turbo Delphi für Win32
 
#1

Warten bis der OnIdle-Eventhandler fertig ist

  Alt 13. Mai 2004, 06:24
Hallo,

folgende Situation macht mir gerade etwas Kopfzerbrechen: In einem OnIdle-Eventhandler rufe ich eine bestimmte Routine-A auf, deren Abarbeitung gelegentlich auch mal etwas länger dauern kann ...und weswegen ich in diese Routine-A auch noch eine Application.ProcessMessages – Anweisung eingebaut habe. Wird nun während der Abarbeitung dieser Routine-A dann eine Keyboard-Taste gedrückt, so kommt es also (auch "während" diese Routine-A gerade abgearbeitet wird) trotzdem zum gewünschten Aufruf des OnKeyDown-Eventhandlers. So, und hier (in diesem OnKeyDown-Eventhandler) geht es nun darum, dass bei einer ganz bestimmten Key-Eingabe ich die dortige Programmausführung nun quasi solange parken möchte bzw. sie wieder an die OnIdle-initiierte Routine-A zurückgeben möchte, bis diese besagte Routine-A dann zu Ende abgearbeitet wurde und der OnIdle-Eventhandler wieder returniert hat. Danach erst, möchte ich dann die Arbeiten im OnKeyDown-Eventhandler fortführen.

Hört sich irgendwie einfach an, aber im Moment komme ich einfach nicht drauf, wie man diese Rückgabe der Programmausführung an diese besagte Routine-A am besten bewerkstelligen könnte... um, wie gesagt, erst nach der Beendigung des OnIdle-Eventhandlers dann die Arbeiten im OnKeyDown-Eventhandler wieder fortzusetzen.

Gibt's dazu eventuell irgendein spezielles Verfahren oder ähnliches?

Thx im Voraus
MfG (& Thx ggf.)
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#2

Re: Warten bis der OnIdle-Eventhandler fertig ist

  Alt 13. Mai 2004, 06:31
Ja, TimerRoutine setzen, dort kommt der Code rein, der nach dem Abarbeiten von OnIdle gemacht werden soll. Im OnKeyDown setzt du dann am Ende Timer1.Enabled := True, und dann springt das Programm zurück in die OnIdle. Am Ende der OnIdle wird dann der Rest von OnKeyDown wegen des Timers ausgeführt. Allerdings musst du am Anfang der OnTimer-Routine Enabled wieder auf False setzen.
Falls du in der OnIdle allerdings ProcessMessages verwendest, so musst du den Umweg so machen:
Delphi-Quellcode:
//in OnKeyDown:
Timer1.Tag := 1;
//...
//in OnIdle:
//...
Timer1.Enabled := Timer1.Tag = 1;
Timer1.Tag := 0;
Ich hoffe das Prinzip ist einigermaßen verständlich
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Benutzerbild von maximov
maximov

Registriert seit: 2. Okt 2003
Ort: Hamburg
548 Beiträge
 
Delphi 2005 Professional
 
#3

Re: Warten bis der OnIdle-Eventhandler fertig ist

  Alt 13. Mai 2004, 15:17
Was hast du denn vor? Hört sich so an, als ob da threads viel sinnvoller wären...wegen unterbrechung von routinen wärend der ausführung und späteres weiterfahren.
mâxîmôv.

{KDT}
  Mit Zitat antworten Zitat
TStringlist

Registriert seit: 1. Dez 2003
360 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: Warten bis der OnIdle-Eventhandler fertig ist

  Alt 13. Mai 2004, 15:54
Hi, Thx erstmal beiden, aber die Situation ist so, dass ich das OnKeyDown eigentlich gar nicht zu Ende machen kann, sondern darin an einer ganz bestimmten Stelle diese Routine-A da selbst nochmal aufrufe. Und wenn ich die nun aber schon im OnIdle angefangen habe, dann soll sie diesbezüglich also jetzt einfach nur zu Ende gebracht werden. Solange möchte ich dann im OnKeyDown quasi nur anhalten, weil ich von der Arbeit dieser Routine-A im Weiteren dann ja auch wieder abhängig bin.

Aber auch wenn ich im OnKeyDown returnieren würde, würde der Programmablauf in der Routine-A nicht fortgesetzt, sondern der (Programmablauf) würde dann zuerst weiter in Richtung OnKeyPress, OnSelectChange und OnChange-Eventhandler weitermarschieren. Und davor sollte das Ergebnis von Routine-A ja schon längst fertig vorliegen bzw. verfügbar sein.


Zur Not gänge auch ein Abbruch der Routine-A, um diese dann einfach im OnKeyDown selbst nochmal ganz neu aufzurufen - aber das geht auch irgendwie nicht (hmmmmm ...es sei denn, ich definierte so etwas wie eine immer weiter fortlaufende Aufrufnummer für diese Routine-A ...mit der ich, wenn ich irgend-irgendwann mal wieder zu dieser Routine-A zurückreturniere würde (die einst im Auftrage des OnIdle aufgerufen war), dann feststellen könnte, dass es in der Zwischenzeit schon einen weiteren Aufruf gegeben hat und womit dieser dann jetzt also überholten Aufruf sofort abzubrechen wäre).


Leider muss ich gestehen, Threads bisher noch nie nötig gehabt zu haben... Event. könnte es also sein, dass die hier eine Lösung wären?

(...werde mir letzteres Thema heute abend doch mal etwas genauer ansehen.)
MfG (& Thx ggf.)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:00 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz