linux
C LANGUAGE
callback
event driven
Authors: WhoAmI, CrazyMonkey
email: kccddb@gmail.com
Date: 20230416
Copyright: CC BY-NC-SA
HW: 如果 每個 action 有 多種狀態 (輸入 event sequence e0 e1 … e2) 例如 stat 0, stat 1, stat 2 您會如何設計?
例如 e0 e1 e2 則正確, 否則 錯誤 (例如 e0 e0 e1) 錯誤
Time Dependent FSM(Fine State Machine) 問題
function pointer 是c 語言的重要技巧, 一般初學者比較少接觸, 然而在很多實務設計, 例如 AJAX(Asynchronous JavaScript and XML), FSM(Fine State Machine)… 中會用到, 此外 c 語言運用物件導向觀念亦會使用到.
處理 time-dependent FSM 也是 網路程式的重要問題
例如 pop3 SSL 網路驗證
Linux signal 就是此種 function pointer
typedef void (*sighandler_t)(int);
sighandler_t 是一新 type
sighandler_t signal(int signum, sighandler_t handler);
此種方式可以讓設計者自行設計 handler
另一例子 qsort
void qsort(void *base, size_t nmemb, size_t size,
int (*compar)(const void *, const void *));
Event loop (JavaScript execution flow, Win32 proramming) 是類式的觀念, 也都可能用到callback 與 OOP(Object-oriented programming) 的方法.
另一例子讓讀者熟悉 callback, event listener, …這些特別的寫程式方法
在此例子中只要增加 Event 中的元素即可執行依照 name 執行 action!
例如 一位設計團隊一員設計一action, 最後再合起來, 如此更能容易除錯與設計
:::
在此例子中只要增加 Event 中的元素即可執行依照 name 執行 action!
例如 一位設計團隊一員設計一action, 最後再合起來, 如此更能容易除錯與設計
variable argument lists+function pointer+variadic function 可以彈性設計 action
您也可 定義 action 的 return value 方便除錯
Homework: 思考此方法的優點
Appendix: State Machine Design in C, by David Lafreniere
善用 Macros
typeof