NexusForce 1.0.0
A rigorously engineered full-stack C++ backend library.
载入中...
搜索中...
未找到
share_memory.hpp
浏览该文件的文档.
1#ifndef NEFORCE_CORE_SYSTEM_SHARE_MEMORY_HPP__
2#define NEFORCE_CORE_SYSTEM_SHARE_MEMORY_HPP__
3
11
12#include "NeForce/core/exception/system_exception.hpp"
13NEFORCE_BEGIN_NAMESPACE__
14
19
24struct share_memory_exception final : system_exception {
25 explicit share_memory_exception(const char* info = "Share Memory Operation Failed.",
26 const error_code code = last_error()) noexcept :
27 system_exception(info, code) {}
28
29 explicit share_memory_exception(const exception& e) :
30 system_exception(e) {}
31
32 ~share_memory_exception() override = default;
33
34 NEFORCE_NODISCARD const char* type() const noexcept override { return "share_memory_exception"; }
35};
36 // Exceptions
38
44
51class NEFORCE_API share_memory {
52public:
57 enum class access_mode {
58 read_only = 0x01,
59 read_write = 0x02,
60 };
61
66 enum class open_mode {
67 create_only,
68 open_only,
69 open_or_create
70 };
71
73
74private:
75 native_handle_type handle_;
76 string name_;
77 size_t size_{0};
78 size_t internal_mapped_size_{0};
79 size_t mapped_size_{0};
80 void* original_mapped_addr_{nullptr};
81 void* mapped_addr_{nullptr};
82 access_mode access_mode_{access_mode::read_write};
83 bool is_open_{false};
84 size_t data_offset_{0};
85 bool mutex_owner_{false};
86#ifdef NEFORCE_PLATFORM_WINDOWS
87 void* mutex_handle_{nullptr};
88#endif
89
90public:
94 share_memory() noexcept;
95
104 explicit share_memory(const string& name, size_t size, open_mode mode = open_mode::open_or_create,
105 access_mode access = access_mode::read_write);
106
107 share_memory(const share_memory&) = delete;
108 share_memory& operator=(const share_memory&) = delete;
109
113 share_memory(share_memory&& other) noexcept;
114
118 share_memory& operator=(share_memory&& other) noexcept;
119
124
133 void open(const string& name, size_t size, open_mode mode = open_mode::open_or_create,
134 access_mode access = access_mode::read_write);
135
139 void close() noexcept;
140
148 void* map(size_t offset = 0, size_t length = 0);
149
153 void unmap() noexcept;
154
159 NEFORCE_NODISCARD void* data() const noexcept { return mapped_addr_; }
160
166 template <typename T>
167 NEFORCE_NODISCARD T* data() const noexcept {
168 return static_cast<T*>(mapped_addr_);
169 }
170
175 NEFORCE_NODISCARD size_t size() const noexcept { return size_; }
176
181 NEFORCE_NODISCARD size_t mapped_size() const noexcept { return mapped_size_; }
182
187 NEFORCE_NODISCARD const string& name() const noexcept { return name_; }
188
193 NEFORCE_NODISCARD bool is_open() const noexcept { return is_open_; }
194
199 NEFORCE_NODISCARD bool is_mapped() const noexcept { return mapped_addr_ != nullptr; }
200
206 bool flush(bool async = false);
207
214 void grow(size_t new_size);
215
222 void lock();
223
227 void unlock();
228
233 bool try_lock();
234
242 static bool remove(const string& name);
243
249 NEFORCE_NODISCARD static bool exists(const string& name);
250};
251 // ShareMemory
253
254NEFORCE_END_NAMESPACE__
255#endif // NEFORCE_CORE_SYSTEM_SHARE_MEMORY_HPP__
bool flush(bool async=false)
刷新共享内存到磁盘
bool try_lock()
尝试获取进程间互斥锁
bool is_open() const noexcept
检查是否已打开
void close() noexcept
关闭共享内存
void grow(size_t new_size)
扩增共享内存大小
void * data() const noexcept
获取映射地址
void * map(size_t offset=0, size_t length=0)
映射共享内存到进程地址空间
access_mode
访问模式枚举
T * data() const noexcept
获取映射地址(类型转换版本)
static bool remove(const string &name)
删除共享内存对象
size_t size() const noexcept
获取共享内存大小
void lock()
获取进程间互斥锁
void unmap() noexcept
取消映射
size_t mapped_size() const noexcept
获取映射大小
bool is_mapped() const noexcept
检查是否已映射
const string & name() const noexcept
获取共享内存名称
share_memory() noexcept
默认构造函数
static bool exists(const string &name)
检查共享内存是否存在
void open(const string &name, size_t size, open_mode mode=open_mode::open_or_create, access_mode access=access_mode::read_write)
打开或创建共享内存
void unlock()
释放进程间互斥锁
open_mode
打开模式枚举
future< async_result_t< Func, Args... > > async(launch policy, Func &&function, Args &&... args)
异步执行函数(指定策略)
void * native_handle_type
系统句柄类型
error_code last_error() noexcept
获取当前系统错误码
const char * type() const noexcept override
获取异常类型