词条 | eventcore |
释义 | EventCore 概述 摘要:本文主要讲述EventCore的主要功能,实现原理,和使用方法 本页内容 什么是EventCore EventCore适用于 EventCore的原理 EventCore的使用方法 EventCore与C++ 在C++中使用EventCore 什么是EventCore EventCore是模拟windows消息机制,实现线程同步、线程通信、进程通信、事件驱动的一个开源项目。 EventCore的最新源代码,可以在http://event.googlecode.com 得到。 EventCore适用于 我们知道Windows窗口是用消息循环来实现事件驱动、窗口间通信、线程同步等功能的。我们在编写多线程无窗口程序(控制台程序,系统服务)时,死锁成为多线程程序的常见bug,线程同步、线程通信成了一个难题,为了解决这些问题,如果在编写多线程无窗口程序(控制台程序,系统服务)时,如果引入Windows消息循环机制,这些难题就迎刃而解了,但是windows只为我们提供了PostThreadMessage这样一个可用于无窗口程序的消息通信函数,因此开发一个与窗口无关,而能实现Windows消息循环机制一样功能的类库是很有必要的,EventCore就是为了这个目的而存在的。 EventCore的原理 EventCore内部有一个全局的线程列队,一个全局的句柄列队,再为需要事件驱动的线程建一个全局的事件列队,为了让所有进程都能共享访问队列,每个队列都是一个windows内存映射文件 EventCore API 函数表 序号 EventCore函数 相似功能的Windows函数 1 CreateEventEx CreateWindow 2 DestroyEvent DestroyWindow 3 GetEvent GetMessage 4 PeekEvent PeekMessage 5 DispatchEvent DispatchMessage 6 ReplyEvent ReplyMessage 7 InSendEvent InSendMessage 8 PostEvent PostMessage 9 SendEvent SendMessage 10 SendEventCallback SendMessageCallback 11 SendEventTimeout SendMessageTimeout 12 SendNotifyEvent SendNotifyMessage 13 PostThreadEvent PostThreadMessage 14 PostQuitEvent PostQuitMessage 15 PostCopyDataEvent PostMessage[WM_CPOYDATA] 16 FindEvent FindWindow 17 EnumEvent EnumWindows 18 GetEventName GetWindowText 19 SetEventName SetWindowText 20 GetEventProc GetWindowLongPtr[GWLP_WNDPROC] 21 SetEventProc SetWindowLongPtr[GWLP_WNDPROC] 22 IsEvent IsWindow 23 FreeThreadQueue 24 GetEventData 25 SetEventData EventCore的使用方法 Eventcore的使用方法和Windows消息机制几乎一样,请看下面的代码 int CALLBACK EventProc(LPEVENT origEvt) { switch(origEvt ->EvtID) { case EVT_CREATE: { //调用EVT_CreateEvent 时收到的事件 } break; case EVT_DESTROY: { //调用EVT_DestroyEvent 时收到的事件 } return 1; } } int _tmain(int argc, _TCHAR* argv[]) { HEVENT hEvent=CreateEventEx(_T(“Test”),EventProc,NULL); EVT evt; while(GetEvent(&evt)) { DispatchEvent(&evt); } return evt.wParam; } EventCore与C++ EventCore本身就是用C++开发的,开发EventCore的目的,也就是为了解决多线程C++程序通信,数据传递,函数调用,防死锁,线程同步等问题的,因为在C++程序中使用EventCore是非常方便的。 在C++中使用EventCore class CEventSamples : public EventCore::CEventAPI<CEventSamples> { public: CEventSamples(void) { } CEventSamples(LPCTSTR szclass) :EventCore::CEventAPI<CEventSamples>(szclass) { } ~CEventSamples(void) { } BEGIN_EVT_MAP(CEventSamples) EVENT_HANDLER(EVT_CREATE,OnCreate) EVENT_HANDLER(EVT_DESTROY,OnDestroy) END_EVT_MAP() public: LRESULT OnCreate(LPEVT origEvt, BOOL& bHandled) { printf("OnCreate "); return 1; } LRESULT OnDestroy(LPEVT origEvt, BOOL& bHandled) { printf("OnDestory "); return 1; } }; int _tmain(int argc, _TCHAR* argv[]) { CEventSamples Samples(_T("default")); ::PostEvent(Samples.GetEvent(),EVT_USER+1,1,100); getchar(); return 0; } |
随便看 |
百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。