4D Summit 2016: Laurent Esnault představuje pracovníky a uživatelské rozhraní v preemptivním režimu

Automaticky přeloženo z Deepl

Náš viceprezident pro inženýrství Laurent Esnault vysvětluje výměnu informací mezi více procesy A mezi procesy a formuláři během své Break Out Session: Preemptivní vícevláknové zpracování na konferenci 4D Summit 2016. Díky preemptivnímu vícevláknovému zpracování můžete mít více paralelních procesů, a tím přidávat další a další uživatele, ať už pro desktopové nebo webové aplikace.

Pokud jste Laurentovu relaci na 4D Summitu 2016 nestihli, podívejte se na toto 15minutové video a užijte si osobní školení od mistra preemptivního vícevláknového zpracování!

Předpoklady:

Abyste mohli využívat výhod preemptivního vícevláknového zpracování, budete muset používat:

Ale nebojte se! Máme pro vás několik výkonných a snadných řešení, která si podrobně představíme na názorných příkladech.

Jak sdílet informace mezi procesy

Pokud nemáte meziprocesové proměnné v preemptivním režimu, jak sdílet informace mezi procesy? Proto zavádíme nový koncept: „pracovníků“. Ale co přesně je to pracovník?

Jsem rád, že jste se zeptali! Jedná se o okno zpráv spojené s procesem speciálně určeným k provádění jeho zpráv. Pomocí CALL WORKER příkazu můžete odeslat zprávu z jednoho procesu do druhého (poslat mu informaci nebo ho požádat, aby něco udělal). Syntaxe tohoto příkazu je dost podobná příkazu New process příkazu, např. můžete předat libovolný parametr a/nebo metodu projektu.

Použijme malou animaci, abychom lépe pochopili, jak to funguje:

V tomto příkladu chceme předávat informace z procesu aplikace do procesu myWorker. Proces aplikace běží a proces myWorker je pozastavený.

  • V procesu aplikace se CALL WORKER je zavolán příkaz, který předá nějaké parametry myWorker, a my chceme, aby myWorker provedl metodu projektu myMethod.
  • Vytvoří zprávu, která je asynchronně odeslána do schránky zpráv určené pro proces myWorker. Příznak je nahoře, takže proces Worker se automaticky probudí a vyzvedne zprávu, načte její obsah (parametry) a provede myMethod.
  • Když proces myWorker dokončí provádění myMethod, nezemře. Pouze se pozastaví a čeká na další zprávu, která se má vykonat. To je hlavní rozdíl oproti New process příkazu, který vytvoří proces, provede metodu s nějakými parametry a pak zemře.

Kdy tedy pracovník zemře? V zásadě zemře, když zavřete aplikaci nebo když zavoláte příkaz KILL WORKER příkaz. Nedojde k náhlému usmrcení procesu, ale pouze k odeslání zprávy workeru s žádostí o spáchání sebevraždy.

Ukázka: Workery

Podívejte se na ukázkovou databázi použitou pro demonstraci s příslušnými vysvětlivkami v příspěvku Vanessy o workerech.

Jak přistupovat k uživatelskému rozhraní z preemptivních procesů

Dříve jsme si řekli, že z preemptivního procesu nelze přistupovat k uživatelskému rozhraní. Je zřejmé, že jsme pro to museli poskytnout řešení. Proto jsme zavedli funkci CALL FORM příkazu. Tento příkaz je podobný příkazu CALL WORKER příkazu. Tentokrát se však nejedná o okno zprávy přiřazené procesu, ale o okno zprávy přiřazené oknu.

CALL FORM Umožňuje odeslat zprávu oknu a požádat formulář běžící v něm o provedení metody s určitými parametry.

Pro demonstraci konceptu opět použijeme malou animaci:

blank

V tomto příkladu chceme z procesu (který může být preemptivní) nebo z workeru něco provést v běžícím formuláři v tomtéž nebo jiném procesu.

  • Voláme CALL FORM příkaz a předáme referenční číslo okna( tj. hodnotu long int vrácenou příkazem Open form window příkazem) ve vstupním parametru jako metodu projektu, kterou chceme spustit(myMethod) s nějakými parametry.
  • Vytvoří se zpráva, která se asynchronně odešle do schránky zpráv přidružené k oknu.
  • Proces obsluhující okno automaticky zjistí, že má zprávu. Přijme zprávu a provede metodu myMethod a její parametry.
  • Poté proces pokračuje v práci s oknem „jako obvykle“ (zpracovává události jako stisknutí klávesy, stisknutí myši atd.).

Jak vidíte, je to dost podobné předchozímu příkladu o pracovnících.

Ukázka: Posílání zpráv mezi formuláři

Prohlédněte si příklad databáze použité pro demonstraci s odpovídajícími vysvětlivkami v příspěvku Vanessy o zasílání zpráv mezi formuláři.