2012-12-28 17 views
9

Vorrei sapere se è possibile implementare qualcosa di simile:callback Delphi?

procedure waitandcall(time,@MyProcedureOrFunction)

cui eseguire la funzione o la procedura che ho creato?

Non sono sicuro che vengano chiamati callback.

risposta

17

È assolutamente possibile e non è nemmeno necessario @ prima della funzione.

In realtà, tutti gli eventi si basano su questo.

Inizia definendo un tipo per la funzione/procedura

type 
    TMyProc = procedure(Param1: Integer); 

Quindi è possibile utilizzare il procedimento di tipo ovunque, a patto che la firma del procedimento corrispondente al tipo.

Se stai usando un metodo di oggetto invece di una procedura/funzione normale, è necessario utilizzare of object

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

Per chiamare la richiamata dal di dentro, si può usare qualcosa di simile:

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

Grazie che è stato veloce :)! – ELCouz

+0

Appena aggiunto un esempio su come è possibile utilizzare il callback. – ESG

+0

Se capisco questo significa che potrei passare qualche procedura? – ELCouz

3

I callback sono esattamente ciò che vengono chiamati e Delphi è in grado di creare e chiamarli entrambi. Sono anche noti come puntatori di funzioni . Vedere Procedural Types nella documentazione.

+0

Avete un esempio di come usarli correttamente? Intendo cosa devo scrivere all'interno della funzione waitandcall per eseguire la procedura? – ELCouz

+1

Se fa quello che suggerisce il nome, puoi farlo in due istruzioni: 'Sleep (t); F; ' –

+0

Fondamentalmente volevo una procedura di" blocco "(per un thread) che contava il tempo (gettickcount) e aspetta (sleep) quindi avvia qualsiasi procedura – ELCouz