CMCore/inc/hgl/event/EventProc.h

75 lines
1.3 KiB
C
Raw Normal View History

2022-07-07 21:32:35 +08:00
#ifndef HGL_EVENT_PROC_INCLUDE
#define HGL_EVENT_PROC_INCLUDE
#include<hgl/type/Queue.h>
namespace hgl
{
/**
* <EFBFBD>¼<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
class EventProc
{
public:
EventProc()=default;
virtual ~EventProc()=default;
virtual bool Proc()=0;
};//class EventProc
using EventProcQueue=Queue<EventProc *>;
/**
* ִ<EFBFBD><EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>
*/
inline bool UpdateEvent(EventProcQueue *epq)
{
if(!epq||epq->GetCount()<=0)
return(false);
EventProc *e;
if(epq->Pop(e))
{
e->Proc();
delete e;
return(true);
}
return(false);
}
/**
* ˢ<EFBFBD><EFBFBD>ִ<EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param epq <EFBFBD>¼<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* @param max_count <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ˢ<EFBFBD>¸<EFBFBD><EFBFBD><EFBFBD>(-1<EFBFBD><EFBFBD>ʾ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>)
*/
inline int UpdateEventQueue(EventProcQueue *epq,int max_count=-1)
{
if(!epq||epq->GetCount()<=0||max_count==0)
return(0);
int count=0;
EventProc *e;
while(epq->Pop(e))
{
if(e)
{
e->Proc();
delete e;
}
++count;
if(--max_count==0)
break;
}
return count;
}
}//namespace hgl
#endif//HGL_EVENT_PROC_INCLUDE