Multithreading - dotaz   otázka

VB.NET, Threading, WinForms

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.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Zkoušel jsem se do toho vpravit, ale nevím, zda odpověď bude k užitku.

Vlákno vrátí požadovaný výsledek nebo vrátí informaci, že se nepřipojilo, chybu lze odchytit, ne?

Pokud chybu neodchytíš, pak mu necháš chvilku na práci, takže další interval s časem na připojení?

Záleží na tom, aby se od ukončení vlákna opět akce spustila po daném intervalu? Pokud ano, pak musíš mít 12timerů, které budou po 2,5s spouštět vlákno s připojením jinak jeden timer s dvanácti úlohama, ale ...

Zvládne vlákno úlohu zpracovat v daném intervalu včetně času navíc na připojení čili chvilky navíc na práci, aby vrátilo výsledek nebo chybu? Pokud to nezvládne, pak máš spuštěny předchozí úlohy a spouštíš nové úlohy, které se znovu zkouší připojit. Pak potřebuješ projít předchozí úlohy, reagovat jsou-li ukončené či běžící, navíc těch stavů může být víc pokud necháš interval ve vlákně plus čas na připojení. Běříci v čase na připojení nepřipojené, běžící připojené, nepřipojené po uplynutí času na připojení, odpojené po úspěšném připojení a čekající v intervalu na nové spuštění po připojení nebo nepřipojení... Chce to pořádně promyslet a určitě nenechat předchozí vlákna běžet a přes ně vytvářet nová, určitě se vyplatí reagovat na stav jednotlivých vláken, protože každá úloha bude jedinečná a nevyzpytatelná. Ďábelské! Záleží hlavně na tobě, víš, jak to má fungovat. Happpy coding! :-)

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback