自己備忘使用
//在共享記憶體中一定要做好揮斥訊號量的使用,防止多個程序同時進行修改記憶體,可以吧共享記憶體作為臨界資源處理
using system;
using system.collections.generic;
using system.linq;
using system.runtime.compilerservices;
using system.runtime.interopservices;
using system.text;
using system.threading;
namespace commonlib
}public
long sharedmemorysize
}public
enum initresult
#endregion
#region ctor
public
sharedmemory
(string moryname)
else}}
///
/// 根據名稱建立乙個互斥資源
///
/// 互斥資源名稱
///
private
mutex
createmutexoropen
(string moryname)
catch
if(tex is
null
)return tex;
}//析構函式在釋放資源時候 呼叫
~sharedmemory()
#endregion
public
initresult
init
(long memorysize)if(
string
.isnullorempty
(sharedmemoryname))if
(memorysize <=
0|| memorysize > memory_maxsize)
m_memsize = memorysize;
//1. 建立記憶體共享體,存進字段
m_hsharedmemoryfile =
(invalib_handle_value, intptr.zero,
(uint
)page_read_write,0,
(uint
)memorysize, sharedmemoryname)
;//2. 判斷建立記憶體共享體是否成功
if(m_hsharedmemoryfile == intptr.zero)
else
}//3. 建立記憶體對映
m_pwdata =
mapviewoffile
(m_hsharedmemoryfile, file_map_write,0,
0,(uint
)memorysize)
;//4. 判斷記憶體對映是否成功
if(m_pwdata == intptr.zero)
else
}catch
(exception ex)
finally
}public
void
close()
mutex.
releasemutex()
; mutex.
close()
;}public
bool
read
(ref
byte
bytedata,
int lngaddr,
int lngsize)
if(m_blint)
else
return
true;}
///
/// 寫入共享記憶體
///
/// 待寫入的資料
/// 待寫入陣列的位置
/// 待寫入資料長度
/// 偏移位置
///
public
bool
write
(byte
bytedata,
int lngaddr,
int lngsize,
int offset)
if(m_blint)
else
return
true;}
public
bool
clear()
}}
C 共享記憶體
共享記憶體作為程序通訊的一種方式,通過記憶體對映檔案,然後允許不同的程序訪問同一塊記憶體實現程序間通訊。示例主要分為讀和寫兩個不同的程序。share write.cpp include include using namespace std intmain share read.cpp includ...
c 實現記憶體對映檔案共享記憶體
記憶體對映檔案是利用虛擬記憶體把檔案對映到程序的位址空間中去,在此之後程序操作檔案,就像操作程序空間裡的位址一樣了,比如使用c語言的 memcpy等記憶體操作的函式。這種方法能夠很好的應用在需要頻繁處理乙個檔案或者是乙個大檔案的場合,這種方式處理io效率比普通io效率要高 00001.using s...
共享記憶體操作類 c
共享記憶體操作類 using system using system.collections.generic using system.text using system.runtime.interopservices namespace sharememlib sharemem 初始化共享記憶體 ...