1#ifndef NEFORCE_CORE_SYSTEM_SHARE_MEMORY_HPP__
2#define NEFORCE_CORE_SYSTEM_SHARE_MEMORY_HPP__
12#include "NeForce/core/exception/system_exception.hpp"
13NEFORCE_BEGIN_NAMESPACE__
24struct share_memory_exception final : system_exception {
25 explicit share_memory_exception(
const char* info =
"Share Memory Operation Failed.",
27 system_exception(info, code) {}
29 explicit share_memory_exception(
const exception& e) :
30 system_exception(e) {}
32 ~share_memory_exception()
override =
default;
34 NEFORCE_NODISCARD
const char*
type() const noexcept
override {
return "share_memory_exception"; }
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};
84 size_t data_offset_{0};
85 bool mutex_owner_{
false};
86#ifdef NEFORCE_PLATFORM_WINDOWS
87 void* mutex_handle_{
nullptr};
148 void*
map(
size_t offset = 0,
size_t length = 0);
159 NEFORCE_NODISCARD
void*
data() const noexcept {
return mapped_addr_; }
166 template <
typename T>
167 NEFORCE_NODISCARD T*
data() const noexcept {
168 return static_cast<T*
>(mapped_addr_);
175 NEFORCE_NODISCARD
size_t size() const noexcept {
return size_; }
181 NEFORCE_NODISCARD
size_t mapped_size() const noexcept {
return mapped_size_; }
187 NEFORCE_NODISCARD
const string&
name() const noexcept {
return name_; }
193 NEFORCE_NODISCARD
bool is_open() const noexcept {
return is_open_; }
199 NEFORCE_NODISCARD
bool is_mapped() const noexcept {
return mapped_addr_ !=
nullptr; }
254NEFORCE_END_NAMESPACE__
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)
映射共享内存到进程地址空间
T * data() const noexcept
获取映射地址(类型转换版本)
static bool remove(const string &name)
删除共享内存对象
size_t size() const noexcept
获取共享内存大小
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)
打开或创建共享内存
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
获取异常类型