Files
mir_server/sdk/utils/TimeCall.h

98 lines
4.1 KiB
C
Raw Normal View History

2025-01-09 17:45:40 +08:00
#pragma once
/************************************************************************
************************************************************************/
#include "_osdef.h"
class CTimeCaller
{
public:
/*
*
* lpThis OOPthis指针
* lpData
* nCount
*/
typedef VOID (STDCALL *TimedCallBack) (LPVOID lpThis, LPVOID lpData, INT_PTR nCount);
public:
CTimeCaller();
/*
* Comments:
* Param LPVOID lpThis: OOPthis指针
* Param TimedCallBack lpCall: CTimeCaller::TimedCallBack
* Param LPVOID lpData:
* Param ULONGLONG lInterval:
* Param ULONGLONG lNextCall: TickCount0
* @Return HANDLE:
*/
HANDLE AddTimeCall(LPVOID lpThis, TimedCallBack lpCall, LPVOID lpData, ULONGLONG lInterval, ULONGLONG lNextCall = 0);
/*
* Comments:
* Param HANDLE hTimedCall:
* @Return BOOL: TRUE否则返回FALSE
*/
BOOL RemoveTimeCall(HANDLE hTimedCall);
/*
* Comments:
* Param HANDLE hTimedCall:
* Param PULONGLONG lpNextCall: TickCount值的数据缓冲
* @Return ULONGLONG:
*/
ULONGLONG GetCallInterval(HANDLE hTimedCall, PULONGLONG lpNextCall);
/*
* Comments:
* Param HANDLE hTimedCall:
* Param ULONGLONG lInterval:
* Param ULONGLONG lNextCall: TickCount值
* @Return bool: true
*
* lNextCall参数表示下次调用此函数的TickCount值0
*
*
* N次调用的功能
*/
bool SetCallInterval(HANDLE hTimedCall, ULONGLONG lInterval, ULONGLONG lNextCall = 0);
/*
* Comments:
* Param ULONGLONG lRunTickLimit: Run函数运行的时间限制0
* @Return INT_PTR:
*/
INT_PTR Run(ULONGLONG lRunTickLimit = 0);
protected:
/*
* Comments: TickCount
*
* @Return ULONGLONG:
*/
virtual ULONGLONG GetCurrentTick();
protected:
/**
*
***********************/
typedef struct tagTimeCallInfo
{
TimedCallBack lpCallback; //回调函数指针
LPVOID lpThis; //回调对象用于支持OOP存储this指针
LPVOID lpData; //回调数据,数据由注册时传递
INT_PTR nCallCount; //调用次数
ULONGLONG lNextCallTick;//下次调用的时间(TickCount)
ULONGLONG lInterval; //回调周期
BOOL boMarkedRemove;//是否标记为移除
}TIMECALLINFO, *PTIMECALLINFO;
protected:
wylib::container::CBaseLinkedList<TIMECALLINFO> m_CallList; //回调对象列表
wylib::container::CLinkedListIterator<TIMECALLINFO> m_pRunIter; //下此继续检查的回调对象节点
INT_PTR m_nRmCallCount;//标记移除的数量
};