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 是本站注册商标
发表回复