/// @brief メッセージを作成する /// @pre 事前にInitMessageが実行されている必要がある public bool SendMessage(Message message) { // 初期化されていなければ失敗 if (!IsMessageInitialized()) { Trace.WriteLine("****Interprocess: SendMessage FAILED"); return false; } Trace.WriteLine("****Interprocess: SendMessage"); // ロック取得 mutex_message_.WaitOne(); // そのままコピー WriteMessage(message); // ロック解放 mutex_message_.ReleaseMutex(); return true; }
/// @brief Messageを書き込む void WriteMessage(Message message) { byte[] buffer = new byte[size_of_message_]; IntPtr ptr = Marshal.AllocHGlobal(size_of_message_); Marshal.StructureToPtr(message, ptr, false); Marshal.Copy(ptr, buffer, 0, size_of_message_); Marshal.FreeHGlobal(ptr); view_of_message_.Write(buffer, 0, size_of_message_); }
/// @brief メッセージを受け取る /// @pre 事前にInitMessageが実行されている必要がある public bool ReceiveMessage(out Message message) { // 初期化されていなければ失敗 if (!IsMessageInitialized()) { Trace.WriteLine("****Interprocess: ReceiveMessage FAILED"); message = new Message(); return false; } //Trace.WriteLine("****Interprocess: ReceiveMessage"); // ロック取得 mutex_message_.WaitOne(); // そのままコピー message = ReadMessage(); // ロック解放 mutex_message_.ReleaseMutex(); return true; }