77 lines
1.9 KiB
Markdown
77 lines
1.9 KiB
Markdown
|
|
# 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 库
|