引用http://www.programmer-club.com.tw/showSameTitleN/c/20869.html
callback,字面上的解釋就是「回呼」,這牽涉到多工作業系統中兩個同時執行﹝concurrent﹞的不同模組。
一種情形是,A 模組給 B 模組一個 function pointer,請 B 在處理完某項工作後,或是在適當時機,使用這個 function pointer 來呼叫該 function 函式。
callback,字面上的解釋就是「回呼」,這牽涉到多工作業系統中兩個同時執行﹝concurrent﹞的不同模組。
一種情形是,A 模組給 B 模組一個 function pointer,請 B 在處理完某項工作後,或是在適當時機,使用這個 function pointer 來呼叫該 function 函式。
例如,A 模組裡面寫了一個 function 叫做 CallMeIfDone,然後它啟動了 B 模組,並且把 CallMeIfDone 的 pointer 傳給 B 模組。A 模組繼續執行它的工作,B 模組也同時在處理它的事情,等到 B 模組忙完了,它就會呼叫 CallMeIfDone,但是這個函式是寫在 A 模組裡面的,所以實際上是跑回來 A 模組的地盤執行 CallMeIfDone,因此就稱為「回呼,callback」。
另一種情形是,B 模組是一個獨立執行的模組,專門處理使用者輸入,每當使用者敲一下鍵盤,或是動一下滑鼠,它就會產生一個事件,需要處理這些事件的其他模組必須向 B 模組登記 callback,例如 A 模組向 B 模組登記了 KeyboardEvents 的 callback,那麼 B 模組在偵測到鍵盤動作時,就會去呼叫這個callback了,當然這個callback也是寫在 A 模組裡面的。
另一種情形是,B 模組是一個獨立執行的模組,專門處理使用者輸入,每當使用者敲一下鍵盤,或是動一下滑鼠,它就會產生一個事件,需要處理這些事件的其他模組必須向 B 模組登記 callback,例如 A 模組向 B 模組登記了 KeyboardEvents 的 callback,那麼 B 模組在偵測到鍵盤動作時,就會去呼叫這個callback了,當然這個callback也是寫在 A 模組裡面的。