GrabBag/Module/ShareMem/README.md

77 lines
1.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# VrShareMem - 跨平台共享内存模块
## 概述
VrShareMem 是一个跨平台的共享内存模块,支持 Windows 和 Linux 操作系统。提供了统一的接口来创建、管理和操作共享内存区域,支持进程间的数据共享和同步。
## 特性
- 跨平台支持Windows/Linux
- 统一的接口设计
- 内置同步机制std::timed_mutex
- 内存边界检查
- 自动资源管理
## 使用示例
```cpp
#include "IVrShareMem.h"
#include "VrError.h"
int main() {
// 创建共享内存实例
IVrShareMem* sharedMem = CreateShareMemInstance();
// 创建共享内存区域
int ret = sharedMem->CreateOrOpen("test_memory", 1024, true);
if (ret != SUCCESS) {
// 错误处理
DestroyShareMemInstance(sharedMem);
return -1;
}
// 映射内存
void* ptr = sharedMem->MapView();
if (ptr == nullptr) {
// 错误处理
sharedMem->Close();
DestroyShareMemInstance(sharedMem);
return -1;
}
// 写入数据
const char* data = "Hello, Shared Memory!";
sharedMem->WriteData(0, data, strlen(data) + 1);
// 读取数据
char buffer[256];
int readBytes = sharedMem->ReadData(0, buffer, sizeof(buffer));
// 使用锁进行同步
if (sharedMem->Lock(1000) == SUCCESS) { // 1秒超时
// 临界区操作
sharedMem->Unlock();
}
// 清理资源
sharedMem->Close();
DestroyShareMemInstance(sharedMem);
return 0;
}
```
## 注意事项
1. 共享内存名称在同一系统中必须唯一
2. 创建者进程负责删除共享内存资源
3. **重要**: 锁机制使用 `std::timed_mutex`,仅适用于同一进程内的线程同步,不支持跨进程同步
4. 确保在程序退出前调用 `Close()` 方法
5. Linux 下需要链接 `rt`
## 依赖
- C++11 或更高版本
- Windows: kernel32.dll, user32.dll
- Linux: rt 库