From 7acba820bcf40c01cbfe66b2dff79aec28cdd62a Mon Sep 17 00:00:00 2001 From: parallelbgls Date: Wed, 27 Dec 2017 19:07:26 +0800 Subject: [PATCH] Fix --- Modbus.Net/Modbus.Net/FifoController.cs | 16 ++++++++++------ Modbus.Net/Modbus.Net/MatchController.cs | 3 ++- .../Modbus.Net/MatchDirectlySendController.cs | 2 +- 3 files changed, 13 insertions(+), 8 deletions(-) diff --git a/Modbus.Net/Modbus.Net/FifoController.cs b/Modbus.Net/Modbus.Net/FifoController.cs index efc8ac7..6535461 100644 --- a/Modbus.Net/Modbus.Net/FifoController.cs +++ b/Modbus.Net/Modbus.Net/FifoController.cs @@ -27,9 +27,13 @@ namespace Modbus.Net /// 构造器 /// /// 间隔时间 - public FifoController(int acquireTime) + /// 是否开启信号量 + public FifoController(int acquireTime, bool activateSema = true) { - _taskCycleSema = new Semaphore(0, _waitingListMaxCount); + if (activateSema) + { + _taskCycleSema = new Semaphore(0, _waitingListMaxCount); + } AcquireTime = acquireTime; } @@ -38,7 +42,7 @@ namespace Modbus.Net { try { - _taskCycleSema.WaitOne(); + _taskCycleSema?.WaitOne(); while (!_taskCancel) { if (AcquireTime > 0) @@ -62,7 +66,7 @@ namespace Modbus.Net if (WaitingMessages.Count <= 0) { _currentSendingPos = null; - _taskCycleSema.Close(); + _taskCycleSema?.Close(); sendSuccess = true; } else if (WaitingMessages.Count > WaitingMessages.IndexOf(_currentSendingPos) + 1) @@ -75,7 +79,7 @@ namespace Modbus.Net } if (sendSuccess) { - _taskCycleSema.WaitOne(); + _taskCycleSema?.WaitOne(); } } } @@ -125,7 +129,7 @@ namespace Modbus.Net var success = base.AddMessageToList(def); if (success) { - _taskCycleSema.Release(); + _taskCycleSema?.Release(); } return success; } diff --git a/Modbus.Net/Modbus.Net/MatchController.cs b/Modbus.Net/Modbus.Net/MatchController.cs index 8717c30..1ddc60c 100644 --- a/Modbus.Net/Modbus.Net/MatchController.cs +++ b/Modbus.Net/Modbus.Net/MatchController.cs @@ -18,7 +18,8 @@ namespace Modbus.Net /// /// 匹配字典,每个Collection代表一个匹配集合,每一个匹配集合中的数字代表需要匹配的位置,最后计算出来的数字是所有位置数字按照集合排序后叠放在一起 /// 获取间隔 - public MatchController(ICollection<(int,int)>[] keyMatches, int acquireTime) : base(acquireTime) + /// 是否开启信号量 + public MatchController(ICollection<(int,int)>[] keyMatches, int acquireTime, bool activateSema = true) : base(acquireTime, activateSema) { KeyMatches = keyMatches; } diff --git a/Modbus.Net/Modbus.Net/MatchDirectlySendController.cs b/Modbus.Net/Modbus.Net/MatchDirectlySendController.cs index 9f086e7..d27f39c 100644 --- a/Modbus.Net/Modbus.Net/MatchDirectlySendController.cs +++ b/Modbus.Net/Modbus.Net/MatchDirectlySendController.cs @@ -13,7 +13,7 @@ namespace Modbus.Net { /// public MatchDirectlySendController(ICollection<(int, int)>[] keyMatches) : base(keyMatches, - 0) + 0, false) { }