B4 umožňuje naprogramování několika současně probíhajících činností. Pro každou takovouto činnost je v programu definováno samostatné vlákno. Všechna běžící vlákna provádějí příkazy současně. Vlákna se proto dají využít, pokud potřebujete, aby po scéně běhalo několik Baltíků najednou, nebo aby se prováděly dvě činnosti najednou.
Jeden a tentýž Baltík by neměl provádět činnosti naprogramované ve dvou současně běžících vláknech, ta by se totiž o něj přetahovala, on by střídavě vykonával činnosti pro jednotlivá vlákna a navenek by se choval poměrně chaoticky.
B4 nabízí pro tento typ úloh nabízí možnost používat v programu několik navzájem nezávislých Baltíků, kteří se liší pouze svojí barvou. Výběr Baltíků je popsán na stránce Panel nástrojů.
  Spuštění nezávislých vláken
Pro spuštění nezávislého vlákna se používá příkaz Následující příkaz bude spuštěn souběžně (v novém vlákně). Tento příkaz očekává za svojí ikonou příkaz (nejčastěji volání metody), který má spustit v samostatném vlákně.
Při vykonávání příkazu bude příkaz (nebo blok příkazů) následující za touto ikonou spuštěn v samostatném vlákně. To znamená, že program nebude čekat na jeho ukončení, ale bude pokračovat ve vykonávání své činnosti a zároveň bude vykonávat i onen příkaz v novém vlákně.
Prostřednictvím spuštění řady činností v samostatných vláknech lze dosáhnout toho, že všechny tyto činnosti budou prováděny zdánlivě současně (na víceprocesorových strojích dokonce doopravdy současně).
Paralelní spouštění několika činností však s sebou nese mnohá úskalí, z nichž většina se týká nutnosti synchronizace jednotlivých vláken při přístupu ke společným prostředkům.
Nová vlákna zatěžují procesor, proto se jich snažte vytvářet co nejméně. Jestliže mají v programu chodit dva Baltíci najednou, stačí vytvořit jedno nové vlákno (jeden Baltík bude mít příkazy v novém vlákně, druhý za deklarací nového vlákna). Není dobré vytvářet vlákna v cyklu s větším počtem opakování, hlavně ne v nekonečném cyklu.
Příklad (For modes 2D, 3D)
Umožňuje souběžný pohyb Baltíků ve vláknech. Žlutý Baltík popojde na vedlejší pole, následně jdou oba Batíci současně.
Pomohla Vám nápověda?
    Synchronizace vláken pomocí Baltíka
B4 implementuje mechanizmus synchronizace prostřednictvím posílání zpráv a čekání na zprávy.
 Pošli text - Baltík pošle zadanému Baltíkovi nebo všem Baltíkům textovou zprávu.
Po vložení tohoto příkazu B4 nejprve otevře dialogové okno, v němž vyberete Baltíka (jednoho nebo všechny), jemuž aktuální Baltík zašle zadaný text.
Po zadání adresáta se jeho barvou vybarví na ikoně obrázek obálky za Baltíkem a v následující ikoně se objeví textový kurzor očekávající zadání zasílané zprávy. Zadání zprávy ukončíte stiskem Enter nebo klepnutím kamkoliv mimo ikonu.
Příklad (For modes 2D, 3D)
Fialový Baltík pošle zprávu červenému.
Budete-li chtít dodatečně změnit barvu Baltíka, kterému posíláte zprávu, stačí na ikonu poklepat a znovu se otevře okno pro změnu Baltíka.
Budete-li chtít dodatečně změnit text posílané zprávy, poklepejte myší na ikonu s textem zprávy. Ikona se přepne do editačního režimu a budete moci posílaný text upravit.
 Čekej na text - Baltík bude čekat na textovou zprávu od zadaného Baltíka nebo od libovolného Baltíka.
Po vložení tohoto příkazu B4 nejprve otevře dialogové okno, v němž vyberete Baltíka (jednoho nebo všechny), od nějž bude aktuální Baltík očekávat textovou zprávu (stejné okno jako u minulého příkazu).
Po zadání odesílatele se jeho barvou vybarví na ikoně symbol dokumentu za Baltíkem a v následující ikoně se objeví textový kurzor očekávající zadání očekávané zprávy. Zadání zprávy ukončíte stiskem Enter nebo klepnutím kamkoliv mimo ikonu.
V následujícím příkladu je příkaz pro červeného Baltíka, aby čekal na zprávu od fialového, znázorněnou na předchozím obrázku.
Příklad (For modes 2D, 3D)
Červený Baltík čeká na zprávu od fialového.
V případě, že znění textu očekávané zprávy nezadáme, bude čekat na libovolnou zprávu od určeného Baltíka.
Budete-li chtít dodatečně změnit barvu Baltíka, od nějž očekáváte zprávu, stačí na ikonu poklepat a znovu se otevře okno pro změnu Baltíka.
Budete-li chtít dodatečně změnit text očekávané zprávy, poklepejte myší na ikonu s textem zprávy. Ikona se přepne do editačního režimu a budete moci očekávaný text upravit.
Pomohla Vám nápověda?
  Uzamčení objektu
Vlákno může získat výhradní přístup k objektu a označit jej za kritický tak, že k němu nemůže žádné jiné vlákno přistupovat. Používá se k tomu klíčové slovo lock.
Za ikonku Klíčové slovo 'lock' vložte do kulatých závorek objekt, který má být označen za kritický. Pokud objekt obsahuje vlastnost SyncRoot, je lepší do závorek dát objekt.SyncRoot.
Za kulatými závorkami následuje příkaz, nebo blok příkazů, ve kterých je použitý objekt označený jako kritický. Po skončení tohoto bloku je uzamčení objektu opět uvolněno, mohou k němu tedy opět přistupovat další vlákna.
Příklad uzamčení objektu A v C# kódu: lock (A) { /* příkazy pracující s objektem A */ }.
Pokud chtějí další vlákna použít objekt uzamčený dalším vláknem, čekají na jeho odemčení. Takto může nastat tzv. deadlock, kdy dvě vlákna donekonečna čekají na to, až jim to druhé uvolní objekt. Příklad nekonečného čekání na odemčení:
//kód prvního vlákna: 
                  lock (A) { lock (B) { /*příkazy*/ }} 
                  //kód druhého vlákna: 
                  lock (B) { lock (A) { /*příkazy*/ }}
Pokud příkazy proběhnou současně, tak první vlákno uzamkne objekt A druhému vláknu a zároveň druhé vlákno uzamkne objekt B prvnímu vláknu. Obě vlákna pak čekají na odemčení objektu B, nebo A.
Příklad (For modes 2D, 3D, Console)
Vytvoří nový objekt o. Poté ho označí jako kritický, vypíše jeho typ jako testovací řetězec a pak ho vynuluje.
Pomohla Vám nápověda?


Shledali jste tuto informaci pro Vás užitečnou?
Máte nějaký dotaz nebo připomínku k tomuto tématu? Napište nám.
©1978-2010 SGP Systems

Nadřazená stránka | Předchozí stránka | Další stránka