2012-12-28 14 views
9

私はそれがこのような何かを実装することは可能ですかどうかを知りたいと思います:Delphiのコールバック?

procedure waitandcall(time,@MyProcedureOrFunction)

私が作成したファンクションまたはプロシージャを実行しているの?

コールバックと呼ばれるかわかりません。

答えて

17

これは絶対に可能です。機能の前に@は必要ありません。

実際、すべてのイベントはこれに基づいています。そして、あなたがいる限り、あなたの手順の署名があなたのタイプに一致するように、どこでもあなたの手順のタイプを使用することができますあなたの関数/手続き

type 
    TMyProc = procedure(Param1: Integer); 

のためのタイプを定義することにより

スタート。

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

あなたの代わりにプレーンな手続き/関数のオブジェクトメソッドを使用している場合は、あなたがこのようなものを使用することができ、内からコールバックを呼び出すにはof object

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

を使用する必要があります

+0

すごくありがとうございました:)! – ELCouz

+0

コールバックの使用方法の例を追加しました。 – ESG

+0

私がこれを理解すれば、私は何らかの手続きを通過することができますか? – ELCouz

3

コールバックは、それらが呼び出されたものであり、Delphiは完全にそれらを作成して呼び出すことができます。これらは、ファンクションポインタとも呼ばれます。ドキュメントのProcedural Typesを参照してください。

+0

正しく使用する方法の例がありますか?プロシージャを実行するためにwaitandcall関数の中に書く必要があるのですか? – ELCouz

+1

もしその名前が示唆していることをしたら、あなたは2つの命令でそれを行うことができます: 'スリープ(t); F; ' –

+0

基本的には、時間をカウントし(gettickcount)、何らかの手順を待って(睡眠)、「ブロッキング」プロシージャを(スレッド用に)したかった – ELCouz