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;
|
|
|
|
|
};
|
|
|
|
|
|
2025-07-14 00:17:41 +08:00
|
|
|
#endif // VRSHAREMEM_H
|