@@ -28,6 +28,7 @@ OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
28
28
using System . Reflection ;
29
29
using System . Text ;
30
30
using System . Collections . Generic ;
31
+ using System . Threading ;
31
32
32
33
namespace EasyModbus
33
34
{
@@ -74,6 +75,7 @@ public enum RegisterOrder { LowHigh = 0, HighLow = 1 };
74
75
75
76
NetworkStream stream ;
76
77
78
+ private SpinWait sw_delay = new SpinWait ( ) ;
77
79
/// <summary>
78
80
/// Constructor which determines the Master ip-address and the Master Port.
79
81
/// </summary>
@@ -944,8 +946,9 @@ public bool[] ReadDiscreteInputs(int startingAddress, int quantity)
944
946
945
947
while ( receivedUnitIdentifier != this . unitIdentifier & ! ( ( DateTime . Now . Ticks - dateTimeSend . Ticks ) > TimeSpan . TicksPerMillisecond * this . connectTimeout ) )
946
948
{
947
- while ( dataReceived == false & ! ( ( DateTime . Now . Ticks - dateTimeSend . Ticks ) > TimeSpan . TicksPerMillisecond * this . connectTimeout ) )
948
- System . Threading . Thread . Sleep ( 1 ) ;
949
+ while ( dataReceived == false & ! ( ( DateTime . Now . Ticks - dateTimeSend . Ticks ) > TimeSpan . TicksPerMillisecond * this . connectTimeout ) )
950
+ this . sw_delay . SpinOnce ( ) ;
951
+
949
952
data = new byte [ 2100 ] ;
950
953
Array . Copy ( readBuffer , 0 , data , 6 , readBuffer . Length ) ;
951
954
receivedUnitIdentifier = data [ 6 ] ;
@@ -1137,8 +1140,9 @@ public bool[] ReadCoils(int startingAddress, int quantity)
1137
1140
byte receivedUnitIdentifier = 0xFF ;
1138
1141
while ( receivedUnitIdentifier != this . unitIdentifier & ! ( ( DateTime . Now . Ticks - dateTimeSend . Ticks ) > TimeSpan . TicksPerMillisecond * this . connectTimeout ) )
1139
1142
{
1140
- while ( dataReceived == false & ! ( ( DateTime . Now . Ticks - dateTimeSend . Ticks ) > TimeSpan . TicksPerMillisecond * this . connectTimeout ) )
1141
- System . Threading . Thread . Sleep ( 1 ) ;
1143
+ while ( dataReceived == false & ! ( ( DateTime . Now . Ticks - dateTimeSend . Ticks ) > TimeSpan . TicksPerMillisecond * this . connectTimeout ) )
1144
+ this . sw_delay . SpinOnce ( ) ;
1145
+
1142
1146
data = new byte [ 2100 ] ;
1143
1147
1144
1148
Array . Copy ( readBuffer , 0 , data , 6 , readBuffer . Length ) ;
@@ -1329,8 +1333,9 @@ public int[] ReadHoldingRegisters(int startingAddress, int quantity)
1329
1333
while ( receivedUnitIdentifier != this . unitIdentifier & ! ( ( DateTime . Now . Ticks - dateTimeSend . Ticks ) > TimeSpan . TicksPerMillisecond * this . connectTimeout ) )
1330
1334
{
1331
1335
while ( dataReceived == false & ! ( ( DateTime . Now . Ticks - dateTimeSend . Ticks ) > TimeSpan . TicksPerMillisecond * this . connectTimeout ) )
1332
- System . Threading . Thread . Sleep ( 1 ) ;
1333
- data = new byte [ 2100 ] ;
1336
+ this . sw_delay . SpinOnce ( ) ;
1337
+
1338
+ data = new byte [ 2100 ] ;
1334
1339
Array . Copy ( readBuffer , 0 , data , 6 , readBuffer . Length ) ;
1335
1340
1336
1341
receivedUnitIdentifier = data [ 6 ] ;
@@ -1532,8 +1537,9 @@ public int[] ReadInputRegisters(int startingAddress, int quantity)
1532
1537
while ( receivedUnitIdentifier != this . unitIdentifier & ! ( ( DateTime . Now . Ticks - dateTimeSend . Ticks ) > TimeSpan . TicksPerMillisecond * this . connectTimeout ) )
1533
1538
{
1534
1539
while ( dataReceived == false & ! ( ( DateTime . Now . Ticks - dateTimeSend . Ticks ) > TimeSpan . TicksPerMillisecond * this . connectTimeout ) )
1535
- System . Threading . Thread . Sleep ( 1 ) ;
1536
- data = new byte [ 2100 ] ;
1540
+ this . sw_delay . SpinOnce ( ) ;
1541
+
1542
+ data = new byte [ 2100 ] ;
1537
1543
Array . Copy ( readBuffer , 0 , data , 6 , readBuffer . Length ) ;
1538
1544
receivedUnitIdentifier = data [ 6 ] ;
1539
1545
}
@@ -1732,8 +1738,9 @@ public void WriteSingleCoil(int startingAddress, bool value)
1732
1738
while ( receivedUnitIdentifier != this . unitIdentifier & ! ( ( DateTime . Now . Ticks - dateTimeSend . Ticks ) > TimeSpan . TicksPerMillisecond * this . connectTimeout ) )
1733
1739
{
1734
1740
while ( dataReceived == false & ! ( ( DateTime . Now . Ticks - dateTimeSend . Ticks ) > TimeSpan . TicksPerMillisecond * this . connectTimeout ) )
1735
- System . Threading . Thread . Sleep ( 1 ) ;
1736
- data = new byte [ 2100 ] ;
1741
+ this . sw_delay . SpinOnce ( ) ;
1742
+
1743
+ data = new byte [ 2100 ] ;
1737
1744
Array . Copy ( readBuffer , 0 , data , 6 , readBuffer . Length ) ;
1738
1745
receivedUnitIdentifier = data [ 6 ] ;
1739
1746
}
@@ -1911,8 +1918,9 @@ public void WriteSingleRegister(int startingAddress, int value)
1911
1918
while ( receivedUnitIdentifier != this . unitIdentifier & ! ( ( DateTime . Now . Ticks - dateTimeSend . Ticks ) > TimeSpan . TicksPerMillisecond * this . connectTimeout ) )
1912
1919
{
1913
1920
while ( dataReceived == false & ! ( ( DateTime . Now . Ticks - dateTimeSend . Ticks ) > TimeSpan . TicksPerMillisecond * this . connectTimeout ) )
1914
- System . Threading . Thread . Sleep ( 1 ) ;
1915
- data = new byte [ 2100 ] ;
1921
+ this . sw_delay . SpinOnce ( ) ;
1922
+
1923
+ data = new byte [ 2100 ] ;
1916
1924
Array . Copy ( readBuffer , 0 , data , 6 , readBuffer . Length ) ;
1917
1925
receivedUnitIdentifier = data [ 6 ] ;
1918
1926
}
@@ -2107,8 +2115,9 @@ public void WriteMultipleCoils(int startingAddress, bool[] values)
2107
2115
while ( receivedUnitIdentifier != this . unitIdentifier & ! ( ( DateTime . Now . Ticks - dateTimeSend . Ticks ) > TimeSpan . TicksPerMillisecond * this . connectTimeout ) )
2108
2116
{
2109
2117
while ( dataReceived == false & ! ( ( DateTime . Now . Ticks - dateTimeSend . Ticks ) > TimeSpan . TicksPerMillisecond * this . connectTimeout ) )
2110
- System . Threading . Thread . Sleep ( 1 ) ;
2111
- data = new byte [ 2100 ] ;
2118
+ this . sw_delay . SpinOnce ( ) ;
2119
+
2120
+ data = new byte [ 2100 ] ;
2112
2121
Array . Copy ( readBuffer , 0 , data , 6 , readBuffer . Length ) ;
2113
2122
receivedUnitIdentifier = data [ 6 ] ;
2114
2123
}
@@ -2292,8 +2301,9 @@ public void WriteMultipleRegisters(int startingAddress, int[] values)
2292
2301
while ( receivedUnitIdentifier != this . unitIdentifier & ! ( ( DateTime . Now . Ticks - dateTimeSend . Ticks ) > TimeSpan . TicksPerMillisecond * this . connectTimeout ) )
2293
2302
{
2294
2303
while ( dataReceived == false & ! ( ( DateTime . Now . Ticks - dateTimeSend . Ticks ) > TimeSpan . TicksPerMillisecond * this . connectTimeout ) )
2295
- System . Threading . Thread . Sleep ( 1 ) ;
2296
- data = new byte [ 2100 ] ;
2304
+ this . sw_delay . SpinOnce ( ) ;
2305
+
2306
+ data = new byte [ 2100 ] ;
2297
2307
Array . Copy ( readBuffer , 0 , data , 6 , readBuffer . Length ) ;
2298
2308
receivedUnitIdentifier = data [ 6 ] ;
2299
2309
}
@@ -2495,8 +2505,9 @@ public int[] ReadWriteMultipleRegisters(int startingAddressRead, int quantityRea
2495
2505
while ( receivedUnitIdentifier != this . unitIdentifier & ! ( ( DateTime . Now . Ticks - dateTimeSend . Ticks ) > TimeSpan . TicksPerMillisecond * this . connectTimeout ) )
2496
2506
{
2497
2507
while ( dataReceived == false & ! ( ( DateTime . Now . Ticks - dateTimeSend . Ticks ) > TimeSpan . TicksPerMillisecond * this . connectTimeout ) )
2498
- System . Threading . Thread . Sleep ( 1 ) ;
2499
- data = new byte [ 2100 ] ;
2508
+ this . sw_delay . SpinOnce ( ) ;
2509
+
2510
+ data = new byte [ 2100 ] ;
2500
2511
Array . Copy ( readBuffer , 0 , data , 6 , readBuffer . Length ) ;
2501
2512
receivedUnitIdentifier = data [ 6 ] ;
2502
2513
}
0 commit comments