Obvykle všechny skripty v aplikaci PROMOTIC
běží v jednom vlákně (v hlavním vlákně). To znamená, že například pokud jeden skript běží, pak další skripty musí čekat, až běžící skript skončí.
Nelze tedy například vytvářet nekonečné smyčky (např. pomocí příkazů
do...while atd.) pro testování proměnné a ukončit smyčku až proměnná získá požadovanou hodnotu. Takový přístup nekonečným testováním není v systému PROMOTIC přípustný!
To však také znamená, že pokud například ve skriptu spustíme synchronní metodu
Pm.FileCopy pro kopírování velkého souboru na síťový disk, pak tato metoda neskončí (a tedy neskončí aktivní skript), dokud není soubor skutečně zkopírován! Po celou tuto dobu však neběží jiné skripty!
Pro řešení problému tohoto druhu je proto umožněno spouštět skripty v jiném vlákně (threadu). Lze to provést jen
objektem PmaSequencer. Pokud v tomto objektu v kartě "
Sequencer" v konfigurátoru "
Použité vlákno (thread)" je zvoleno
Normal,
BelowNormal nebo
AboveNormal, pak se bude událost
onStep tohoto objektu spouštět ve vlákně s normální, nižší nebo vyšší prioritou. Počáteční hodnoty do tohoto vlákna lze přenést pomocí parametrů
Val1,
Val2 a
Val3 metody
PmaSequencer.Add. Skript pak nad těmito hodnotami může v uživatelském vlákně pracovat (libovolně dlouhou dobu a paralelně se skripty běžícími v hlavním vlákně). Z uživatelského vlákna lze pak zase opačně spouštět skripty v hlavním vlákně voláním metod objektu
PmaFolder - viz vlastnost
PmaObject.Methods.
Upozornění! Pokud se použije jiné
vlákno (thread), pak přístup k ostatním objektům ve skriptu probíhá v jiném než v hlavním vlákně a je nutno vzít v úvahu případné problémy se synchronizací při čtení a zápisu do
Pma objektů. Tato volba je vhodná zejména pro časově náročné výpočetní úkony na pozadí.
Problém se synchronizací (konsistencí) čtení a zápisu dat (při použití jiného vlákna) lze řešit několika způsoby.
Jedním ze základních způsobů je rozdělení celé činnosti na 3 kroky. A to čtení dat z aplikace, zpracování dat a zápis výsledných dat do aplikace (každý krok je implementován vyvoláním události
onStep). Krok čtení a krok zápisu pak lze vyvolat v hlavním vlákně (nedojde k problémům se synchronizací dat) a krok zpracování dat pak lze vyvolat v pracovním vlákně. Určení, zda má být krok proveden v hlavním nebo pracovním vlákně lze určit v parametru
Params metody
PmaSequencer.Add. Čtení dat dat z aplikace a zápis dat zpět do aplikace pak probíhají v hlavním vlákně a vlastní zpracování dat pak probíhá v samostatném pracovním vlákně a nezdržuje hlavní vlákno. Jednotlivé kroky si musí předávat vyčtená a zpracovávaná data. Nejjednodušší k předání je vytvořit ve skriptu daného kroku (událost
onStep) pomocné pole a předat je jako parametr
Val2 metody
PmaSequencer.Add. Existuje samozřejmě také možnost předávat si data v objektu
PmaData. Použití viz
Příklad časově náročného zpracování v pracovním vlákně.