# Was ist Callback?



## Tutankhseth (20. Juli 2004)

Hi, 

ich verstehe einfach nicht was es mit Callback-Funktionen auf sich hat. Kann mir jemand erklären wozu die gut sind und wie man sie benutzt?


----------



## Kachelator (20. Juli 2004)

Callback-Funktionen sind (meist selbstgeschriebene) Funktionen, die man per Zeiger an meist fremde, z.B. API-Funktionen übergibt, damit diese Funktionen die eigene Funktion aufrufen können. Ein Beispiel dafür ist eine Vergleichsfunktion, die an die Sort-Methode eines Listenkontrollelements übergeben wird.


----------



## Tutankhseth (20. Juli 2004)

Ich habe etwas mit Timern rumprobiert und da gibt es die Möglichkeit eine Callback Funktion zu übergeben:
SetTimer(TIMER_ID, 1000, Callback);
Das heisst dann das alle 1000 Millisekunden die Callback Funktion aufgerufen wird wenn ich das richtig verstanden habe, oder?


----------



## Kachelator (20. Juli 2004)

Ja, genau.

Mit MFC geht es aber auch noch etwas komfortabler. Da kannst du beispielsweise einem Dialog einen "OnTimer"-Handler geben. Das ist natürlich letzten Endes dasselbe, aber man kann es einfacher einbauen.


----------



## netrobot (31. Juli 2004)

*was ist dann der Vorteil*

wenn ich richtig verstanden habe, callback funktion ist quasi aufruf einer funktion in einer anderer funktion. das kann ich auch separat schreiben, lasse eine function komplett durchlaufen, dann übergebe das return-value als parameter in andere funktion. was ist dann der vorteil, callback funktion zu benutzen.

und API funktion von windows sind die vordefinierte funktionen?


----------



## JocalAreaNetwork (31. Juli 2004)

@netrobot:

Wie gesagt, stell dir vor, du willst ein Array sortieren, bist aber nicht in der Lage dir selbst einen Sortieralgorithmus zu schreiben und greifst deshalb auf einen bereits implementierten zu.
Woher zum Teufel kennt die Funktion deine Sortierkriterien? Du schreibst also dir in dem Falle eine Funktion, die 2 Elemente überreicht bekommt und dann einen Integerwert zurück gibt, der festlegt, in welcher Reihenfolge diese beiden Elemente angeordnet werden sollen, sowas geht NUR über Callbackfunktionen.
Nen anderes Beispiel wäre die Windowprocedure eines normalen Fensters, die die Systemnachrichten abarbeitet.


----------



## Kachelator (7. August 2004)

Im  Prinzip richtig. Ich würde noch Folgendes anmerken:



> Du schreibst also dir in dem Falle eine Funktion, die 2 Elemente überreicht bekommt und dann einen Integerwert zurück gibt, der festlegt, in welcher Reihenfolge diese beiden Elemente angeordnet werden sollen, sowas geht NUR über Callbackfunktionen.



Ersteres könnte man auch anschaulich als Vergleichsfunktion bezeichnen.
Letzteres stimmt nur im Fall von C, da man mit  C++ auch die Möglichkeit hat, Funktoren (Funktions-_Objekte_) zu übergeben.


----------

