過去,我使用的庫允許我註冊一個回調函數,以便在發生某些事件時庫可以調用我的方法(例如,在使用GUI庫看起來像button.onClick(clickHandler)
的代碼中看到的情況很常見)。如何實現回調處理?
天真,我認爲圖書館的處理機制,可以實現這樣的:
while(1){
if (event1) { event1Handler(); }
if (event2) { event2Handler(); }
...
}
但是這將是真正的浪費嗎?或者真的是它是如何完成的(例如,像java swing或GTK +這樣熟知的GUI庫這樣做)?
背景:
這個問題並沒有真正發生在我,直到我遇到了curses。我想到實現我自己的回調系統,直到我意識到我不知道如何。