Rückruffunktion und Delphis Ereignismodell Rückruffunktion: Die Rückruffunktion ist ein Mechanismus, bei dem der Aufrufer beim Initialisieren eines Objekts einige Parameter an das Objekt übergibt (das Objekt bezieht sich hier auf Objekte in OOP, globale Funktionen usw.), während er eine Funktion übergibt Adresse, über die der Aufrufer auf das Objekt zugreifen kann. Bei dieser Funktion handelt es sich um eine Benachrichtigungsvereinbarung zwischen dem Anrufer und dem Angerufenen. Wenn das vereinbarte Ereignis eintritt, ruft der Angerufene (normalerweise einschließlich eines Arbeitsthreads) die Funktion entsprechend der Rückruffunktionsadresse auf. Auf diese Weise befindet sich der Aufrufer in einem Thread und der Angerufene in einem anderen Thread. Es gibt einige Funktionen in der Windows-API, die Rückruffunktionen verwenden, z. B. CreateThread, SetWindowLong usw. Die entsprechende Rückruffunktion ist in der folgenden Form definiert: function CallBackFunc(Wnd: HWND; Msg, WParam, LParam: Longint): Longint;stdcall;PROcedure ThreadFunction(Ptr: Zeiger); stdcall; Nachricht: Nachricht kann auch als eine Form von Rückruf betrachtet werden, da die Nachricht beim Eintreten des vereinbarten Ereignisses auch vom Anrufer an den Angerufenen übergeben wird. Der Anrufer sendet die Nachricht. Auf diese Weise befindet sich der Aufrufer im Hauptthread und der Angerufene im Hauptthread oder Arbeitsthread. Delphi-Ereignismodell: Viele visuelle Komponenten in der VCL von Delphi verwenden Ereignismodelle, z. B. das OnCreate-Ereignis von TForm. Das Prinzip lautet: Geben Sie die Ereignisfunktion zur Entwurfszeit an. Wenn das Ereignis zur Laufzeit ausgelöst wird, wird die zur Entwurfszeit angegebene Funktion aufgerufen .Ereignisfunktion. Mechanisch gesehen ist das Delphi-Ereignismodell dasselbe wie Callbacks. Es gibt jedoch einige Unterschiede in den spezifischen Formen. Eine reine Callback-Funktion hat die Form einer globalen Funktion, während ein Delphi-Ereignis die Form einer Objektmethode hat. Das heißt, der folgende Callback-Funktionstyp kann definiert werden: typeTCallBackFunc = Prozedur (pData: Zeiger) des Objekts; Dadurch wird das Delphi-Ereignis nur intern in Delphi verwendet, die Rückruffunktion ist sprachübergreifend. Beachten Sie außerdem, dass es sich bei der Rückruffunktion im Allgemeinen um einen Thread handelt, der im Rückrufkörper erstellt wird (Komponenten in Delphi befinden sich im Hauptthread), sodass ein Schutz kritischer Abschnitte erforderlich ist.