windows事件与消息:
事件由用户(操作电脑的人)触发且只能由用户触发,
操作系统能够感觉到由用户触发的事件,并将此事件转换为一个(特定的)消息发送到程序的消息队列中。
概念:
事件是客观存在,而消息往往是人为安排的。
event and event handlers:
event handlers:event发生后,会通知event handlers,它们做相应的回调。
各种框架下事件的实现:
.net框架:
事件机制是通过代理类来实现的。当一个事件被触发时,由该事件的代理来通知(调用)处理该事件的相应方法。
C#:
(1)将实际应用中需通过事件机制解决的问题对象注册到相应的事件处理程序上,表示今后当该对象的状态发生变化时,该对象有权使用它注册的事件处理程序。
(2)当事件发生时,触发事件的对象就会调用该对象所有已注册的事件处理程序。
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++:
event (C++ Component Extensions)
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.