This commit is contained in:
parallelbgls
2017-12-27 19:07:26 +08:00
parent f1b476ab95
commit 7acba820bc
3 changed files with 13 additions and 8 deletions

View File

@@ -27,9 +27,13 @@ namespace Modbus.Net
/// 构造器 /// 构造器
/// </summary> /// </summary>
/// <param name="acquireTime">间隔时间</param> /// <param name="acquireTime">间隔时间</param>
public FifoController(int acquireTime) /// <param name="activateSema">是否开启信号量</param>
public FifoController(int acquireTime, bool activateSema = true)
{ {
_taskCycleSema = new Semaphore(0, _waitingListMaxCount); if (activateSema)
{
_taskCycleSema = new Semaphore(0, _waitingListMaxCount);
}
AcquireTime = acquireTime; AcquireTime = acquireTime;
} }
@@ -38,7 +42,7 @@ namespace Modbus.Net
{ {
try try
{ {
_taskCycleSema.WaitOne(); _taskCycleSema?.WaitOne();
while (!_taskCancel) while (!_taskCancel)
{ {
if (AcquireTime > 0) if (AcquireTime > 0)
@@ -62,7 +66,7 @@ namespace Modbus.Net
if (WaitingMessages.Count <= 0) if (WaitingMessages.Count <= 0)
{ {
_currentSendingPos = null; _currentSendingPos = null;
_taskCycleSema.Close(); _taskCycleSema?.Close();
sendSuccess = true; sendSuccess = true;
} }
else if (WaitingMessages.Count > WaitingMessages.IndexOf(_currentSendingPos) + 1) else if (WaitingMessages.Count > WaitingMessages.IndexOf(_currentSendingPos) + 1)
@@ -75,7 +79,7 @@ namespace Modbus.Net
} }
if (sendSuccess) if (sendSuccess)
{ {
_taskCycleSema.WaitOne(); _taskCycleSema?.WaitOne();
} }
} }
} }
@@ -125,7 +129,7 @@ namespace Modbus.Net
var success = base.AddMessageToList(def); var success = base.AddMessageToList(def);
if (success) if (success)
{ {
_taskCycleSema.Release(); _taskCycleSema?.Release();
} }
return success; return success;
} }

View File

@@ -18,7 +18,8 @@ namespace Modbus.Net
/// </summary> /// </summary>
/// <param name="keyMatches">匹配字典每个Collection代表一个匹配集合每一个匹配集合中的数字代表需要匹配的位置最后计算出来的数字是所有位置数字按照集合排序后叠放在一起</param> /// <param name="keyMatches">匹配字典每个Collection代表一个匹配集合每一个匹配集合中的数字代表需要匹配的位置最后计算出来的数字是所有位置数字按照集合排序后叠放在一起</param>
/// <param name="acquireTime">获取间隔</param> /// <param name="acquireTime">获取间隔</param>
public MatchController(ICollection<(int,int)>[] keyMatches, int acquireTime) : base(acquireTime) /// <param name="activateSema">是否开启信号量</param>
public MatchController(ICollection<(int,int)>[] keyMatches, int acquireTime, bool activateSema = true) : base(acquireTime, activateSema)
{ {
KeyMatches = keyMatches; KeyMatches = keyMatches;
} }

View File

@@ -13,7 +13,7 @@ namespace Modbus.Net
{ {
/// <inheritdoc /> /// <inheritdoc />
public MatchDirectlySendController(ICollection<(int, int)>[] keyMatches) : base(keyMatches, public MatchDirectlySendController(ICollection<(int, int)>[] keyMatches) : base(keyMatches,
0) 0, false)
{ {
} }