过去,我使用了允许我注册回调的库,以便库可以在某些事件发生时调用我的方法(例如,在使用 GUI 库的代码中很常见button.onClick(clickHandler)
)。
天真地,我认为图书馆的处理机制可以像这样实现:
while(1){
if (event1) { event1Handler(); }
if (event2) { event2Handler(); }
...
}
但这真的很浪费,对吧?或者这真的是如何完成的(例如众所周知的 GUI 库,如 java swing,或 GTK+ 就是这样做的)?
背景:
直到我遇到curses才真正想到这个问题。我考虑过实现自己的回调系统,直到我意识到我不知道怎么做。