2012-12-28 10 views
9

Ich würde gerne wissen, ob es möglich ist, etwas zu implementieren:Delphi-Rückrufe?

procedure waitandcall(time,@MyProcedureOrFunction)

, die die Funktion oder Prozedur, die ich ausführen erstellt haben?

Ich bin mir nicht sicher, ob sie Rückrufe genannt werden.

Antwort

17

Es ist absolut möglich, und Sie brauchen nicht einmal @ vor Ihrer Funktion.

In der Tat basieren alle Ereignisse darauf.

starten durch einen Typ für Ihre Funktion/Prozedur definieren

type 
    TMyProc = procedure(Param1: Integer); 

Dann können Sie Ihre Prozedur überall Typ verwenden, solange Unterschrift Ihre Prozedur entspricht Ihrer Art.

Wenn Sie eine Objektmethode statt einer einfachen Prozedur/Funktion verwenden, müssen Sie of object

type 
    TMyMethod = procedure(Param1: Integer) of object; 

verwenden, um Ihren Rückruf von innen anzurufen, Sie so etwas wie diese verwenden:

procedure DoAndCallBack(MyProc: TMyProc) 
begin 
    MyProc(1); 
end; 
+0

Vielen Dank das war schnell :)! – ELCouz

+0

Ein Beispiel hinzugefügt, wie Sie den Rückruf verwenden können. – ESG

+0

Wenn ich das verstehe, könnte ich irgendwelche Verfahren passieren? – ELCouz

3

Callbacks sind genau das, was diese aufgerufen werden, und Delphi ist vollständig in der Lage, sie zu erstellen und aufzurufen. Sie sind auch als Funktionszeiger bekannt. Siehe Procedural Types in der Dokumentation.

+0

Haben Sie ein Beispiel, wie Sie sie richtig verwenden können? Ich meine, was ich in die Waitandcall-Funktion schreiben muss, um die Prozedur auszuführen? – ELCouz

+1

Wenn es tut, was sein Name andeutet, können Sie es in zwei Anweisungen tun: 'Sleep (t); F; ' –

+0

Im Grunde wollte ich eine" blockierende "Prozedur (für einen Thread) die Zeit zählen (gettickcount) und warten (Schlaf), dann starten Sie, was auch immer – ELCouz