首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C# 共享記憶體實作(二):讀寫長度與計數資訊區、信號量同步、Unicode 編碼與正則分割解析

     編輯:關於C語言

讀取資訊區


public int ReadLengthAndCount()
{
    byte[] buf = new byte[infoSize];
    if (infoSize > m_MemSize) return 2;
    if (!m_bInit) return 1;

    Marshal.Copy(m_pwData, buf, 0, infoSize);
    string s = Encoding.Unicode.GetString(buf).Trim('\0');
    string[] parts = Regex.Split(s, @"\s+");
    m_length = Convert.ToInt32(parts[0]);
    m_count = Convert.ToInt32(parts[1]);
    return 0;
}

寫入資訊區(含信號量保護)


public int WriteLengthAndCount(int length, int count)
{
    semWriteLength.WaitOne();
    try
    {
        if (infoSize > m_MemSize) return 2;
        if (!m_bInit) return 1;

        string s = length.ToString() + " " + count.ToString();
        byte[] buf = Encoding.Unicode.GetBytes(s);
        Marshal.Copy(buf, 0, m_pwData, buf.Length);
        return 0;
    }
    finally { semWriteLength.Release(); }
}

關鍵技術點

  • Semaphore 保護寫入操作,避免多進程競態。
  • Encoding.Unicode 確保跨進程字串一致性。
  • Regex.Split 解析長度與計數,彈性應對格式變化。

完整工程原始碼下載:CSDN。環境:WinXP SP3、VS2005、.NET 2.0。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved