c#实现读写信号类

C#实现读写信号类。

#region COPYRIGHT(C)

/*********************************************************

 * PRODUCT  :   SCISE(R) COMBINE Framework For C#

 * COPYRIGHT:   2002 SCISE(R) NETWORKS. All Rights Reserved.

 * WEBSITE  :   http://www.scise.cn

 **************************************************************/

#endregion

using System;

using System.Threading;

namespace Scise.Combine.Sync;

#region RWSignal

/// <summary>

/// 读写信号类

/// </summary>

public class RWSignal : IDisposable

{

    /// <summary>

    /// 写信号

    /// </summary>

    private ManualResetEvent _writeSignal;

    /// <summary>

    /// 读信号

    /// </summary>

    private ManualResetEvent _readSignal;

    /// <summary>

    /// 构造函数

    /// </summary>

    /// <param name=”write”>true:可写不可读,false:可读不可写</param>

    public RWSignal(bool write = true)

    {

        _writeSignal = new ManualResetEvent(write);

        _readSignal = new ManualResetEvent(!write);

    }

    /// <summary>

    /// 等待写信号

    /// </summary>

    /// <returns>true:写信号;false:超时</returns>

    public bool WaitWrite()

    {

        return _writeSignal.WaitOne();

    }

    /// <summary>

    /// 等待读信号

    /// </summary>

    /// <returns>true:写信号;false:超时</returns>

    public bool WaitRead()

    {

        return _readSignal.WaitOne();

    }

    /// <summary>

    /// 设置写信号

    /// </summary>

    /// <returns></returns>

    public bool SetWrite()

    {

        return _writeSignal.Set();

    }

    /// <summary>

    /// 设置读信号

    /// </summary>

    /// <returns></returns>

    public bool SetRead()

    {

        return _readSignal.Set();

    }

    /// <summary>

    /// 取消写信号

    /// </summary>

    /// <returns></returns>

    public bool ResetWrite()

    {

        return _writeSignal.Reset();

    }

    /// <summary>

    /// 取消读信号

    /// </summary>

    /// <returns></returns>

    public bool ResetRead()

    {

        return _readSignal.Reset();

    }

    /// <summary>

    /// 取消读信号和写信号

    /// </summary>

    /// <returns></returns>

    public bool Reset()

    {

        return _readSignal.Reset() && _writeSignal.Reset();

    }

    #region IDisposable Support

    /// <summary>

    ///     对象是否已经被Dispose了

    /// </summary>

    private bool _hasDisposed;

    /// <summary>

    ///     释放资源

    /// </summary>

    /// <param name=”disposing”>false:析构函数调用,true:被Dispose方法调用</param>

    private void Disposing(bool disposing)

    {

        if (_hasDisposed)

        {

            return;

        }

        if (disposing)

        {

            _readSignal.Dispose();

            _writeSignal.Dispose();

        }

        _hasDisposed = true;

    }

    /// <summary>

    ///     对象的析构函数

    /// </summary>

    ~RWSignal()

    {

        Disposing(false);

    }

    /// <summary>

    ///     IDisposable的Dispose方法

    /// </summary>

    public void Dispose()

    {

        Disposing(true);

        GC.SuppressFinalize(this);

    }

    #endregion

}

#endregion

SCISE 是本站注册商标

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注