windows事件與消息:ios
事件由用戶(操做電腦的人)觸發且只能由用戶觸發,c++
操做系統可以感受到由用戶觸發的事件,並將此事件轉換爲一個(特定的)消息發送到程序的消息隊列中。windows
概念: app
事件是客觀存在,而消息每每是人爲安排的。框架
event and event handlers:this
event handlers:event發生後,會通知event handlers,它們作相應的回調。spa
各類框架下事件的實現:操作系統
.net框架: .net
事件機制是經過代理類來實現的。當一個事件被觸發時,由該事件的代理來通知(調用)處理該事件的相應方法。
代理
C#:
BOOST:
[boost.signal]
概念:信號(signal)(事件)與插槽(slot)(事件handler),當對應的信號被髮出時,相關聯的插槽們即被執行。
#include <boost/signal.hpp> #include <iostream> void func1() { std::cout << "Hello" << std::flush; } void func2() { std::cout << ", world!" << std::endl; } int main() { boost::signal<void ()> s; s.connect(1, func2); s.connect(0, func1); s(); }
c++:
The event keyword declares an event, which is a notification to registered subscribers (event handlers) that something of interest has occurred.
事件關鍵字聲明瞭一個事件,這個事件是一個對event handler們的通知,而後某些回調會發生。
from MSDN:
For example, clicking on a button or a menu item causes a message to be sent that this happened (message contains an ID). Then there can be a message handler that catches the message and does something or there may not be and the message is just ignored.