Multithreading ve VB .NET   zodpovězená otázka

VB.NET, Threading

Dobrý den.

V mé aplikaci bych chtěl použít dvě vlákna. Hlavní vlákno by provádělo SQL příkaz do databáze, zatímco ve vedlejším vlákně by mi přiskakovaly políčka na progressbaru, aby uživatel věděl, že aplikace "nezamrzla". Rozsah progressbaru by byl přesně na dobu, než by databáze vyhlásila "command timeout".

Znamená to tedy, že hlavní vlákno by "stálo na místě" tzn. čekalo by odezvu od databáze a zároveň vedlejší vlákno by s pomocí Timeru zvyšovalo hodnotu progressbaru.

Nevím jestli by bylo možné toto řešit pomocí "backgroundworkeru".

Taky mi není jasné, jestli je možné aby obě vlákna běžela přesně paralelně, nebo je to tak, že chvíli běží jedno a pak zase druhé.

O multithreadingu je napsáno hodně, ale pro začátečníka je problém se v tom zorientovat.

Předem děkuji za rady.

nahlásit spamnahlásit spam 1 / 1 odpovědětodpovědět

Nesmysl. Řešením by bylo udělat ProgressBar ve stylu Marquee (běžící skupina obdélníčků jako při startu Windows) který není třeba aktualizovat pomocí Timeru ani v samostatném vlákně (vytvářet nové vlákno které slouží pouze pro aktualizaci uživatelského rozhraní je hloupost) a metodu SQL dotazu spustit asynchronně (viz. IAsyncResult). Při dokončení asynchronní operace by se zavolal delegát potřebné metody a v případě vypršení Timeoutu by se ošetřila vyjímka.

To že dvě vlákna jedné aplikace poběží skutečně paralelně je velice malá pravděpodobnost, nicméně možné to je (pokud máte dvou nebo více jádrový procesor). Každému vláknu je přidělen určitý strojový čas po jehož uplynutí je vlákno "zmrazeno" v aktuálním stavu a pokračuje se v něm když na něj zase přijde řada. Vzhledem k tomu, že vlákno může být "zmrazeno" uprostřed vykonávání nějaké operace, tento stav je právě zdrojem největších problémů v asynchronním programování.

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

Tak děkuji mockrát za radu. Koukám, že jsem na to šel zbytečně složitě. A přitom to jde udělat tak jednodušše. Progress bar ve stylu Marquee je dobrý nápad. Nemusím ošetřovat, jak dlouho SQL příkaz poběží. Paráda.

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