int yuxiangrousi = 0; // 全局變量:魚香肉絲(醬油量)// 回調函數:媽媽處理醬油(將醬油加入魚香肉絲)
void mother_callback(int new_jiangyou)
{yuxiangrousi += new_jiangyou; // 把醬油放進魚香肉絲
}// 孩子買醬油(模擬異步操作,如另一個線程)
// 參數:媽媽的回調函數(處理醬油的函數)
void son_dajiangyou(void(*mother_callback)(int jiangyou_bought))
{int temp_jiangyou;temp_jiangyou = by_jiangyou(); // 假設調用買醬油的函數(未定義,模擬獲取醬油量)mother_callback(temp_jiangyou); // 調用媽媽的回調函數處理醬油
}// 媽媽做飯的主邏輯
void mother_cooking(void)
{cook_yuxiangshousi(); // 先做魚香肉絲(未定義,模擬烹飪步驟)son_dajiangyou(mother_callback); // 讓孩子去買醬油,回來后調用回調處理cook_soup(); // 做西紅柿雞蛋湯(未定義,模擬后續步驟)
}// 輔助函數(假設存在,實際需根據場景實現)
// int by_jiangyou(void); // 買醬油(獲取醬油量,未實現)
// void cook_yuxiangshousi(void); // 做魚香肉絲(未實現)
// void cook_soup(void); // 做湯(未實現)
代碼解釋:
- 全局變量:
yuxiangrousi
記錄魚香肉絲中的醬油量(初始為 0)。 - 回調函數?
mother_callback
:- 接收新買的醬油量(
new_jiangyou
),更新全局變量(模擬將醬油加入菜品)。
- 接收新買的醬油量(
son_dajiangyou
?函數:- 模擬孩子買醬油的過程(異步操作,如另一個線程)。
- 調用
by_jiangyou
獲取醬油量(模擬購買),然后通過回調函數(mother_callback
)通知媽媽處理醬油。
mother_cooking
?函數:- 主邏輯:先做魚香肉絲(此時醬油量為 0),然后讓孩子買醬油(異步,不阻塞主線程),同時繼續做湯(模擬并行操作)。
- 當孩子買完醬油(
son_dajiangyou
執行完畢),自動調用mother_callback
更新魚香肉絲的醬油量(模擬異步回調的效果)。
關鍵概念(結合回調函數):
- 異步模擬:
son_dajiangyou
?模擬異步任務(如線程),mother_callback
?作為回調函數,在任務完成后(買醬油回來)被調用。 - 回調機制:媽媽(主線程)在做飯時,不需要等待孩子買醬油(避免阻塞),而是通過回調函數在醬油回來后處理,實現 “并行” 操作(實際在單線程中是順序執行,但邏輯上模擬異步)。
自己理解