105 lines
3.0 KiB
C
105 lines
3.0 KiB
C
|
|
#ifndef IVRSHAREMEM_H
|
|||
|
|
#define IVRSHAREMEM_H
|
|||
|
|
|
|||
|
|
#include <string>
|
|||
|
|
#include "VrShareMem_global.h"
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 共享内存接口类
|
|||
|
|
* 提供跨平台的共享内存创建、映射、读写操作
|
|||
|
|
*/
|
|||
|
|
class VRSHAREMEM_EXPORT IVrShareMem
|
|||
|
|
{
|
|||
|
|
public:
|
|||
|
|
virtual ~IVrShareMem() = default;
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 创建或打开共享内存区域
|
|||
|
|
* @param name 共享内存名称
|
|||
|
|
* @param size 内存大小(字节)
|
|||
|
|
* @param create 是否创建新的共享内存(true:创建,false:打开已存在的)
|
|||
|
|
* @return 成功返回SUCCESS(0),失败返回VrError.h中定义的错误码
|
|||
|
|
*/
|
|||
|
|
virtual int CreateOrOpen(const std::string& name, size_t size, bool create = true) = 0;
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 将共享内存映射到当前进程地址空间
|
|||
|
|
* @return 成功返回映射地址,失败返回nullptr
|
|||
|
|
*/
|
|||
|
|
virtual void* MapView() = 0;
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 取消内存映射
|
|||
|
|
* @return 成功返回SUCCESS(0),失败返回VrError.h中定义的错误码
|
|||
|
|
*/
|
|||
|
|
virtual int UnmapView() = 0;
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 关闭共享内存句柄
|
|||
|
|
* @return 成功返回SUCCESS(0),失败返回VrError.h中定义的错误码
|
|||
|
|
*/
|
|||
|
|
virtual int Close() = 0;
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 获取共享内存大小
|
|||
|
|
* @return 内存大小(字节)
|
|||
|
|
*/
|
|||
|
|
virtual size_t GetSize() const = 0;
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 获取映射地址
|
|||
|
|
* @return 映射地址,未映射返回nullptr
|
|||
|
|
*/
|
|||
|
|
virtual void* GetMappedAddress() const = 0;
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 检查共享内存是否有效
|
|||
|
|
* @return 有效返回true,无效返回false
|
|||
|
|
*/
|
|||
|
|
virtual bool IsValid() const = 0;
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 写入数据到共享内存
|
|||
|
|
* @param offset 偏移量
|
|||
|
|
* @param data 数据指针
|
|||
|
|
* @param size 数据大小
|
|||
|
|
* @return 成功返回写入的字节数,失败返回VrError.h中定义的错误码
|
|||
|
|
*/
|
|||
|
|
virtual int WriteData(size_t offset, const void* data, size_t size) = 0;
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 从共享内存读取数据
|
|||
|
|
* @param offset 偏移量
|
|||
|
|
* @param buffer 输出缓冲区
|
|||
|
|
* @param size 读取大小
|
|||
|
|
* @return 成功返回读取的字节数,失败返回VrError.h中定义的错误码
|
|||
|
|
*/
|
|||
|
|
virtual int ReadData(size_t offset, void* buffer, size_t size) = 0;
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 锁定共享内存(用于同步)
|
|||
|
|
* @param timeout 超时时间(毫秒),-1表示无限等待
|
|||
|
|
* @return 成功返回SUCCESS(0),失败返回VrError.h中定义的错误码
|
|||
|
|
*/
|
|||
|
|
virtual int Lock(int timeout = -1) = 0;
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 解锁共享内存
|
|||
|
|
* @return 成功返回SUCCESS(0),失败返回VrError.h中定义的错误码
|
|||
|
|
*/
|
|||
|
|
virtual int Unlock() = 0;
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 创建共享内存实例
|
|||
|
|
* @return 共享内存实例指针
|
|||
|
|
*/
|
|||
|
|
VRSHAREMEM_EXPORT IVrShareMem* CreateShareMemInstance();
|
|||
|
|
|
|||
|
|
/**
|
|||
|
|
* @brief 销毁共享内存实例
|
|||
|
|
* @param instance 实例指针
|
|||
|
|
*/
|
|||
|
|
VRSHAREMEM_EXPORT void DestroyShareMemInstance(IVrShareMem* instance);
|
|||
|
|
|
|||
|
|
#endif // IVRSHAREMEM_H
|