Äh...
Delphi-Quellcode:
Function StarteWennNichtSchonGestartet : Boolean;
Begin
fMyCriticalSection.Enter;
Try
Result := Not fGestartet;
fGestartet := True;
Finally
fMyCriticalSection.Leave;
End;
End;
Procedure FertigMitDerArbeit;
Begin
fMyCriticalSection.Enter;
Try
fGestartet := False;
Finally
fMyCriticalSection.Leave;
End;
End;
Procedure StarteRoutine;
Begin
If Not StarteWennNichtSchonGestartet Then Exit;
Try
MachWasDuWilst;
Finally
FertigMitDerArbeit;
End;
End;
So vielleicht? Geht auch mit einer Semaphore oder einem
Mutex von Windows...
Du kannst aber auch einfach die Editfelder auf 'ReadOnly' setzen, oder das OnKeyDown-Ereignis der Form (mit KeyPreview = True) überschreiben, oder oder oder.
Ich mache es immer so:
Ich habe einen Timer, der auf 50ms eingestellt ist.
Sobald ein Ereignis eintritt, das die Neuberechnung anstößt, wird der Timer angeschaltet.
Jeder Tastendruck setzt den Timer zurück.
Wenn man nun 50ms nichts tippt, wird er ausgelöst und kann dann z.B. die Berechnungen anwerfen.
So spürt der Anwender keinerlei Verzögerung, bekommt aber trotzdem 'sofort' das Resultat zu sehen.