#pragma once #include "FunctionErrorCode.h" #include "FunctionDataTypeCommon.h" #include "AdvancedFunctionDataElement.h" #include #include #include #define SHAREMEMCLIENTDLL_CLASS_DECL #define INVALID_SHAREMEM_ID (uint64_t)~0 class CShareMemInfo; class CBaseFunctionDataElement; class SHAREMEMCLIENTDLL_CLASS_DECL CShareMemClient { public: CShareMemClient(); virtual ~CShareMemClient(); unsigned short GetUserId(){ return m_dwUserId; }; CBaseFunctionDataElement* CreateDataElement(FUNCTION_DATATYPE eDataType, const std::wstring& strName = L""); void ReleaseDataElement(CBaseFunctionDataElement* pDataElement); int Register(); int UnRegister(); int ReadShareMem(uint64_t dwShareMemId, CBaseFunctionDataElement** vecDataElement, unsigned int nBufferCount, unsigned int& nElementCount); int WriteShareMem(CBaseFunctionDataElement** vecDataElement, unsigned int nElementCount, unsigned long long& dwShareMemId); int ReleaseShareMem(unsigned int dwShareMemId); int ReleaseAllShareMem(); private: static void EncodeId(unsigned short wUserId, unsigned int nShareMemId, unsigned short wContentId, uint64_t& dwShareMemId); static void DecodeId(uint64_t dwShareMemId, unsigned short& wUserId, unsigned int& nShareMemId, unsigned short& wContentId); unsigned short m_dwUserId; CShareMemInfo* m_ShareMemInfo; unsigned int m_dwShareMemCounter; pthread_mutex_t m_ShareMemCounterCritical;//CRITICAL_SECTIONÌæ»»Îªpthread_mutex_t unsigned short m_dwContentCounter; pthread_mutex_t m_ContentCounterCritical; };