using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO.MemoryMappedFiles;
namespace Sender
{
class Sender
{
// 本当はMutex等で排他制御するべき
static void Main(string[] args)
{
// 共有メモリの作成("HelloWorld"という名前で1024バイトで定義)
MemoryMappedFile mmf =
MemoryMappedFile.CreateNew("HelloWorld", 1024);
// 書き込みオブジェクトの生成
MemoryMappedViewAccessor mmva = mmf.CreateViewAccessor();
// 書き込みオブジェクトの現在のバイト位置
int i = 0;
// 書き込み1回目
// 共有メモリの状態
// |int(オブジェクトの数)|char[](Hello )|
string str1 = "Hello ";
char[] data1 = str1.ToCharArray();
mmva.Write(i, data1.Length);
i = i + sizeof(int);
mmva.WriteArray<char>(i, data1, 0, data1.Length);
i = i + sizeof(char) * data1.Length;
System.Threading.Thread.Sleep(1000);
// 書き込み2回目
// 共有メモリの状態
// |(1回目の内容)|int(オブジェクトの数)|char[](World)|
string str2 = "World";
char[] data2 = str2.ToCharArray();
mmva.Write(i, data2.Length);
i = i + sizeof(int);
mmva.WriteArray<char>(i, data2, 0, data2.Length);
i = i + sizeof(char) * data2.Length;
System.Threading.Thread.Sleep(1000);
// 書き込み3回目
// 共有メモリの状態
// |(1~2回目の内容)|int(オブジェクトの数)|char[](!)|
string str3 = "!";
char[] data3 = str3.ToCharArray();
mmva.Write(i, data3.Length);
i = i + sizeof(int);
mmva.WriteArray<char>(i, data3, 0, data3.Length);
i = i + sizeof(char) * data3.Length;
System.Threading.Thread.Sleep(1000);
// 書き込みオブジェクトの破棄
mmva.Dispose();
// 共有メモリの破棄
mmf.Dispose();
}
}
}
コメント