Dobrý den, každé 2,5s spouštím 12 threadů, každý se připojuje přes Ethernet k jinému PLC a vyčítá z něj informace. Pokud je PLC vypnuté / v chybě, může tato událost trvat několik vteřin, proto má každé PLC vlastní thread. Můj dotaz je, zda je lepší vytvořit tyto vlákna, spustit např.
Threads(6).Start()
A vlastní 2,5s interval řešit uvnitř vlákna, s tím, že by se thread nikdy neukončil A nebo mít 2,5s globální timer s tím, že by si řešil, zda je dotyčné vlákno aktivní (tzn. v tomto cyklu se snaží dotyčné vlákno připojit, ale nedaří se mu to, tak mu ještě chvilku nechám na práci a pokud ne, tak vytvoří opět nové vlákno a spustí.
If Not IsNothing(DelkyInstances(6)) AndAlso DelkyInstances(6).IsRunning Then
DelkyInstances(6) = New PLCread(Me, "xxx.xx.x.xxx", 7)
Threads(6) = New Threading.Thread(AddressOf DelkyInstances(6).Start)
Threads(6).IsBackground = True
Threads(6).Start()
End If
Návrat informací mám přes Delegate a to je bez problémů, to mám již dlouhodobě funkční. Jen doteď jsem přistupoval pouze k Jednomu PLC a tak jsem to nemusel řešit :) Děkuji za jakoukoliv informaci.
|