コールバック関数と Delphi のイベント モデル コールバック関数: コールバック関数は、呼び出し元がオブジェクト (ここでのオブジェクトとは、OOP、グローバル関数などのオブジェクトを指します) を初期化するときに、関数を渡すときに、オブジェクトにいくつかのパラメーターを渡すメカニズムです。呼び出し元がオブジェクトにアクセスできるアドレス。この関数は呼び出し元と呼び出し先の間の通知合意であり、合意されたイベントが発生すると、呼び出し先 (通常は作業スレッドを含む) がコールバック関数のアドレスに従って関数を呼び出します。このように、呼び出し元は 1 つのスレッドに存在し、呼び出し先は別のスレッドに存在します。 Windows API には、CreateThread、SetWindowLong など、コールバック関数を使用する関数がいくつかあります。対応するコールバック関数は次の形式で定義されます: function CallBackFunc(Wnd: HWND; Msg, WParam, LParam: Longint): Longint;stdcall;PROcedure ThreadFunction(Ptr: Pointer); stdcall; メッセージ: 合意されたイベントが発生すると、メッセージも呼び出し元から呼び出し先に渡されるため、メッセージは何らかの形式のコールバックとみなすこともできます。発信者がメッセージを送信します。このように、呼び出し元はメインスレッドに存在し、呼び出し先はメインスレッドまたはワーカースレッドに存在します。 Delphi イベント モデル: Delphi の VCL の多くのビジュアル コンポーネントは、TForm の OnCreate イベントなどのイベント モデルを使用します。原則として、設計時にイベント関数を指定し、実行時にイベントがトリガーされると、設計時に指定された関数が呼び出されます。 .イベント機能。機械的には、Delphi イベント モデルはコールバックと同じです。ただし、特定の形式にはいくつかの違いがあります。純粋なコールバック関数はグローバル関数の形式ですが、Delphi イベントはオブジェクト メソッドの形式です。つまり、次のコールバック関数タイプを定義できます。 object のプロシージャ (pData: Pointer); これにより、Delphi イベントのみが Delphi の内部で使用され、コールバック関数はクロスランゲージになります。また、コールバック関数は通常、コールバック本体で作成されるスレッドであるため (Delphi のコンポーネントはメイン スレッドにあります)、クリティカル セクションの保護が必要であることにも注意してください。