Fix
This commit is contained in:
@@ -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)
|
||||||
|
{
|
||||||
|
if (activateSema)
|
||||||
{
|
{
|
||||||
_taskCycleSema = new Semaphore(0, _waitingListMaxCount);
|
_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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user