请输入您要查询的百科知识:

 

词条 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条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。

 

Copyright © 2004-2023 Cnenc.net All Rights Reserved
更新时间:2024/12/23 21:37:19