@@ -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
{
@@ -941,11 +942,12 @@ public bool[] ReadDiscreteInputs(int startingAddress, int quantity)
941
942
DateTime dateTimeSend = DateTime . Now ;
942
943
byte receivedUnitIdentifier = 0xFF ;
943
944
944
-
945
+ SpinWait sw_delay = new SpinWait ( ) ;
945
946
while ( receivedUnitIdentifier != this . unitIdentifier & ! ( ( DateTime . Now . Ticks - dateTimeSend . Ticks ) > TimeSpan . TicksPerMillisecond * this . connectTimeout ) )
946
947
{
947
- while ( dataReceived == false & ! ( ( DateTime . Now . Ticks - dateTimeSend . Ticks ) > TimeSpan . TicksPerMillisecond * this . connectTimeout ) )
948
- System . Threading . Thread . Sleep ( 1 ) ;
948
+ while ( dataReceived == false & ! ( ( DateTime . Now . Ticks - dateTimeSend . Ticks ) > TimeSpan . TicksPerMillisecond * this . connectTimeout ) )
949
+ sw_delay . SpinOnce ( ) ;
950
+
949
951
data = new byte [ 2100 ] ;
950
952
Array . Copy ( readBuffer , 0 , data , 6 , readBuffer . Length ) ;
951
953
receivedUnitIdentifier = data [ 6 ] ;
@@ -1135,10 +1137,13 @@ public bool[] ReadCoils(int startingAddress, int quantity)
1135
1137
readBuffer = new byte [ 256 ] ;
1136
1138
DateTime dateTimeSend = DateTime . Now ;
1137
1139
byte receivedUnitIdentifier = 0xFF ;
1140
+
1141
+ SpinWait sw_delay = new SpinWait ( ) ;
1138
1142
while ( receivedUnitIdentifier != this . unitIdentifier & ! ( ( DateTime . Now . Ticks - dateTimeSend . Ticks ) > TimeSpan . TicksPerMillisecond * this . connectTimeout ) )
1139
1143
{
1140
- while ( dataReceived == false & ! ( ( DateTime . Now . Ticks - dateTimeSend . Ticks ) > TimeSpan . TicksPerMillisecond * this . connectTimeout ) )
1141
- System . Threading . Thread . Sleep ( 1 ) ;
1144
+ while ( dataReceived == false & ! ( ( DateTime . Now . Ticks - dateTimeSend . Ticks ) > TimeSpan . TicksPerMillisecond * this . connectTimeout ) )
1145
+ sw_delay . SpinOnce ( ) ;
1146
+
1142
1147
data = new byte [ 2100 ] ;
1143
1148
1144
1149
Array . Copy ( readBuffer , 0 , data , 6 , readBuffer . Length ) ;
@@ -1326,11 +1331,14 @@ public int[] ReadHoldingRegisters(int startingAddress, int quantity)
1326
1331
1327
1332
DateTime dateTimeSend = DateTime . Now ;
1328
1333
byte receivedUnitIdentifier = 0xFF ;
1334
+
1335
+ SpinWait sw_delay = new SpinWait ( ) ;
1329
1336
while ( receivedUnitIdentifier != this . unitIdentifier & ! ( ( DateTime . Now . Ticks - dateTimeSend . Ticks ) > TimeSpan . TicksPerMillisecond * this . connectTimeout ) )
1330
1337
{
1331
1338
while ( dataReceived == false & ! ( ( DateTime . Now . Ticks - dateTimeSend . Ticks ) > TimeSpan . TicksPerMillisecond * this . connectTimeout ) )
1332
- System . Threading . Thread . Sleep ( 1 ) ;
1333
- data = new byte [ 2100 ] ;
1339
+ sw_delay . SpinOnce ( ) ;
1340
+
1341
+ data = new byte [ 2100 ] ;
1334
1342
Array . Copy ( readBuffer , 0 , data , 6 , readBuffer . Length ) ;
1335
1343
1336
1344
receivedUnitIdentifier = data [ 6 ] ;
@@ -1528,12 +1536,14 @@ public int[] ReadInputRegisters(int startingAddress, int quantity)
1528
1536
readBuffer = new byte [ 256 ] ;
1529
1537
DateTime dateTimeSend = DateTime . Now ;
1530
1538
byte receivedUnitIdentifier = 0xFF ;
1531
-
1539
+
1540
+ SpinWait sw_delay = new SpinWait ( ) ;
1532
1541
while ( receivedUnitIdentifier != this . unitIdentifier & ! ( ( DateTime . Now . Ticks - dateTimeSend . Ticks ) > TimeSpan . TicksPerMillisecond * this . connectTimeout ) )
1533
1542
{
1534
1543
while ( dataReceived == false & ! ( ( DateTime . Now . Ticks - dateTimeSend . Ticks ) > TimeSpan . TicksPerMillisecond * this . connectTimeout ) )
1535
- System . Threading . Thread . Sleep ( 1 ) ;
1536
- data = new byte [ 2100 ] ;
1544
+ sw_delay . SpinOnce ( ) ;
1545
+
1546
+ data = new byte [ 2100 ] ;
1537
1547
Array . Copy ( readBuffer , 0 , data , 6 , readBuffer . Length ) ;
1538
1548
receivedUnitIdentifier = data [ 6 ] ;
1539
1549
}
@@ -1729,11 +1739,14 @@ public void WriteSingleCoil(int startingAddress, bool value)
1729
1739
readBuffer = new byte [ 256 ] ;
1730
1740
DateTime dateTimeSend = DateTime . Now ;
1731
1741
byte receivedUnitIdentifier = 0xFF ;
1742
+
1743
+ SpinWait sw_delay = new SpinWait ( ) ;
1732
1744
while ( receivedUnitIdentifier != this . unitIdentifier & ! ( ( DateTime . Now . Ticks - dateTimeSend . Ticks ) > TimeSpan . TicksPerMillisecond * this . connectTimeout ) )
1733
1745
{
1734
1746
while ( dataReceived == false & ! ( ( DateTime . Now . Ticks - dateTimeSend . Ticks ) > TimeSpan . TicksPerMillisecond * this . connectTimeout ) )
1735
- System . Threading . Thread . Sleep ( 1 ) ;
1736
- data = new byte [ 2100 ] ;
1747
+ sw_delay . SpinOnce ( ) ;
1748
+
1749
+ data = new byte [ 2100 ] ;
1737
1750
Array . Copy ( readBuffer , 0 , data , 6 , readBuffer . Length ) ;
1738
1751
receivedUnitIdentifier = data [ 6 ] ;
1739
1752
}
@@ -1908,11 +1921,14 @@ public void WriteSingleRegister(int startingAddress, int value)
1908
1921
readBuffer = new byte [ 256 ] ;
1909
1922
DateTime dateTimeSend = DateTime . Now ;
1910
1923
byte receivedUnitIdentifier = 0xFF ;
1924
+
1925
+ SpinWait sw_delay = new SpinWait ( ) ;
1911
1926
while ( receivedUnitIdentifier != this . unitIdentifier & ! ( ( DateTime . Now . Ticks - dateTimeSend . Ticks ) > TimeSpan . TicksPerMillisecond * this . connectTimeout ) )
1912
1927
{
1913
1928
while ( dataReceived == false & ! ( ( DateTime . Now . Ticks - dateTimeSend . Ticks ) > TimeSpan . TicksPerMillisecond * this . connectTimeout ) )
1914
- System . Threading . Thread . Sleep ( 1 ) ;
1915
- data = new byte [ 2100 ] ;
1929
+ sw_delay . SpinOnce ( ) ;
1930
+
1931
+ data = new byte [ 2100 ] ;
1916
1932
Array . Copy ( readBuffer , 0 , data , 6 , readBuffer . Length ) ;
1917
1933
receivedUnitIdentifier = data [ 6 ] ;
1918
1934
}
@@ -2104,11 +2120,14 @@ public void WriteMultipleCoils(int startingAddress, bool[] values)
2104
2120
readBuffer = new byte [ 256 ] ;
2105
2121
DateTime dateTimeSend = DateTime . Now ;
2106
2122
byte receivedUnitIdentifier = 0xFF ;
2123
+
2124
+ SpinWait sw_delay = new SpinWait ( ) ;
2107
2125
while ( receivedUnitIdentifier != this . unitIdentifier & ! ( ( DateTime . Now . Ticks - dateTimeSend . Ticks ) > TimeSpan . TicksPerMillisecond * this . connectTimeout ) )
2108
2126
{
2109
2127
while ( dataReceived == false & ! ( ( DateTime . Now . Ticks - dateTimeSend . Ticks ) > TimeSpan . TicksPerMillisecond * this . connectTimeout ) )
2110
- System . Threading . Thread . Sleep ( 1 ) ;
2111
- data = new byte [ 2100 ] ;
2128
+ sw_delay . SpinOnce ( ) ;
2129
+
2130
+ data = new byte [ 2100 ] ;
2112
2131
Array . Copy ( readBuffer , 0 , data , 6 , readBuffer . Length ) ;
2113
2132
receivedUnitIdentifier = data [ 6 ] ;
2114
2133
}
@@ -2289,11 +2308,14 @@ public void WriteMultipleRegisters(int startingAddress, int[] values)
2289
2308
readBuffer = new byte [ 256 ] ;
2290
2309
DateTime dateTimeSend = DateTime . Now ;
2291
2310
byte receivedUnitIdentifier = 0xFF ;
2311
+
2312
+ SpinWait sw_delay = new SpinWait ( ) ;
2292
2313
while ( receivedUnitIdentifier != this . unitIdentifier & ! ( ( DateTime . Now . Ticks - dateTimeSend . Ticks ) > TimeSpan . TicksPerMillisecond * this . connectTimeout ) )
2293
2314
{
2294
2315
while ( dataReceived == false & ! ( ( DateTime . Now . Ticks - dateTimeSend . Ticks ) > TimeSpan . TicksPerMillisecond * this . connectTimeout ) )
2295
- System . Threading . Thread . Sleep ( 1 ) ;
2296
- data = new byte [ 2100 ] ;
2316
+ sw_delay . SpinOnce ( ) ;
2317
+
2318
+ data = new byte [ 2100 ] ;
2297
2319
Array . Copy ( readBuffer , 0 , data , 6 , readBuffer . Length ) ;
2298
2320
receivedUnitIdentifier = data [ 6 ] ;
2299
2321
}
@@ -2492,11 +2514,14 @@ public int[] ReadWriteMultipleRegisters(int startingAddressRead, int quantityRea
2492
2514
readBuffer = new byte [ 256 ] ;
2493
2515
DateTime dateTimeSend = DateTime . Now ;
2494
2516
byte receivedUnitIdentifier = 0xFF ;
2517
+
2518
+ SpinWait sw_delay = new SpinWait ( ) ;
2495
2519
while ( receivedUnitIdentifier != this . unitIdentifier & ! ( ( DateTime . Now . Ticks - dateTimeSend . Ticks ) > TimeSpan . TicksPerMillisecond * this . connectTimeout ) )
2496
2520
{
2497
2521
while ( dataReceived == false & ! ( ( DateTime . Now . Ticks - dateTimeSend . Ticks ) > TimeSpan . TicksPerMillisecond * this . connectTimeout ) )
2498
- System . Threading . Thread . Sleep ( 1 ) ;
2499
- data = new byte [ 2100 ] ;
2522
+ sw_delay . SpinOnce ( ) ;
2523
+
2524
+ data = new byte [ 2100 ] ;
2500
2525
Array . Copy ( readBuffer , 0 , data , 6 , readBuffer . Length ) ;
2501
2526
receivedUnitIdentifier = data [ 6 ] ;
2502
2527
}
0 commit comments