close

 

Description

簡單的說,如果你使用了某個function,那麼你就是『call』了一個function。如果系統或是函式是要求你給一個function pointer,這個function pointer指到一個實際的函式(多半這個函式是你自己寫的)。然後它會在適當的時間呼叫此function,則此function就是所謂的 callback function。因為這個function是被『callback』了。

 

其實這一段是大家公定之類的定義,只是覺得講的沒讓我很能體會。

 

我在網路上有看到一位我覺得是高手的大大,他為此做了一番解釋。

 

經過體會之後,我試著用自己的話表達對CallBack Function做些註解。

以下是那位大大寫的解釋,藍色是我加的。

 

glutReshapeFunc(填上自定函式的名稱);   //填上自定函式的名稱=自定函式的指標

能指定一個自定函式當Callback函式
一般的函式是你在程式碼中有呼叫才執行的,參數是你給的,可能在程式碼中給的或鍵盤輸入

Callback函式則是作業系統來呼叫的,參數是系統給的 


而glutReshapeFunc這個函式要的是一個自定函式的指標 

以我寫的code當例子glutReshapeFunc(WindowSize);

WindowSize是我自己寫的函式,名字也是自己取,glutReshapeFunc並沒有限制你填入的函式名稱
但是對函式的原形有限制,這是WindowSize的原形

void WindowSize(int , int );    //  這個就是自己寫的函式也就是Callback函式

void是固定的,參數也固定兩個,兩個參數的資料型態也固定是int,參數名稱倒是可以自己取


那麼.....glutReshapeFunc所指定的WindowSize到底做了什麼?

當你改變視窗大小時,視窗的長寬改變了,作業系統也察覺到了
於是作業系統呼叫了WindowSize給了WindowSize新的視窗長寬參數,並執行WindowSize的內容 

所以
WindowSize的那兩個參數不是你給程式的,是作業系統要給你的(程式)

 

 

 

 

 

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 LawlietMoon 的頭像
    LawlietMoon

    iPaSsioN sTuDio新世界:雜草魂 生命力

    LawlietMoon 發表在 痞客邦 留言(1) 人氣()