GrabBag/Module/ShareMem/_Inc/VrShareMem.h

60 lines
1.7 KiB
C
Raw Normal View History

2025-07-23 01:35:14 +08:00
#ifndef VRSHAREMEM_H
#define VRSHAREMEM_H
#include "IVrShareMem.h"
#include <string>
#include <mutex>
#include <chrono>
#ifdef _WIN32
#include <windows.h>
#else
#include <sys/mman.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#endif
/**
* @brief
* Windows Linux
*/
class VrShareMem : public IVrShareMem
{
public:
VrShareMem();
virtual ~VrShareMem();
// 实现 IVrShareMem 接口
virtual int CreateOrOpen(const std::string& name, size_t size, bool create = true) override;
virtual void* MapView() override;
virtual int UnmapView() override;
virtual int Close() override;
virtual size_t GetSize() const override;
virtual void* GetMappedAddress() const override;
virtual bool IsValid() const override;
virtual int WriteData(size_t offset, const void* data, size_t size) override;
virtual int ReadData(size_t offset, void* buffer, size_t size) override;
virtual int Lock(int timeout = -1) override;
virtual int Unlock() override;
private:
std::string m_name; // 共享内存名称
size_t m_size; // 内存大小
void* m_mappedAddress; // 映射地址
bool m_created; // 是否创建者
#ifdef _WIN32
HANDLE m_hMapFile; // Windows 文件映射句柄
#else
int m_fd; // Linux 文件描述符
#endif
std::timed_mutex m_mutex; // 互斥锁
// 私有辅助方法
std::string GetPlatformName(const std::string& name) const;
bool CheckBounds(size_t offset, size_t size) const;
};
#endif // VRSHAREMEM_H