A Visual Basic programozási nyelv

Párhuzamosság

1. Bevezetés

A Visual Basicben eseményvezérelt programokat írhatunk. Egyszerre több ablakot jeleníthetünk meg a képernyőn (ezek mind több control-t is tartalmazhatnak), melyek mindegyike eseményt vár, és ezek között váltogathatunk. Egyszerre mindig csak egy eseményhez tartozó kód fut, ezért a párhuzamosság nem valódi.

2. Ablakok példányai

A Visual Basicben az objektumváltozók segítségével egy ablaknak több példányát is létrehozhatjuk egy időben. Egy ilyen példány az eredeti ablak másolata lesz, de attól teljesen független, ezért egy alkalmazást egyszerre több példányban is futtathatunk, illetve az alkalmazás valamely ablakából létrehozhatunk több példányt.

Új ablakot a New kulcsszóval hozhatunk létre. pl.:

Sub Form_Click() Dim Myform As New Form1 Myform.Show Myform.Move(left+300),(top+300) End Sub

Új ablakot a Load vagy Show paranccsal tölthetünk be. A Show nem csak betölti, hanem láthatóvá is teszi az ablakot. Egy ablaknak a többszörös példányai közösen osztoznak a kódon (műveletek kódján), de az adatokról saját másolatuk van. Amikor egy esemény bekövetkezik egy ablak példányon, akkor a hozzárendelt esemény-eljárás kódja hajtódik végre az adott példány adatainak a felhasználásával. Egy létező ablakot az Unload utasítással szüntethetünk meg. Ha egy ablaknak több példánya létezik, akkor a Me mindig az aktuális ablakra mutat. (ahol éppen a kód fut). Ezért az aktuális ablakot az Unload Me utasítással zárhatjuk be. Nem mindig az aktív ablak az aktuális ugyanis előfordulhat, hogy egy ablak timer control-jának timer eseménye következik be akkor is, ha nem az az aktív ablak.

Ha a Show művelettel megjelenítünk egy új ablakot, a további kód végrehajtása folytatódik. Ha azt szeretnénk, hogy a végrehajtás csak akkor folytatódjon, ha a megjelenitett ablak bezárásra került, akkor a Show művelet után tegyük ki a vbModal kifejezést.

Ebben a pontban említeném meg a DoEvents utasítást. Ennek hatására a vezérlés átadódik az operációs rendszernek, és mindaddig nem adódik vissza a programnak, amíg az éppen feldolgozás alatti eseménysor feldolgozása, és a SendKeys sor minden billentyűkódjának átküldése be nem fejeződik. A DoEvents utasítással akkor is elég időt biztosíthatunk az operációs rendszernek az események feldolgozására, ha amúgy a programunk túlságosan leterhelné a processzort.

A nyelv alapvetően nem támogatja a párhuzamos programozást, nem hozhatunk létre önálló végrehajtási szálakat. Így például egy hosszabb időt igénylő művelet elvégzésekor az alkalmazás aktív ablaka nem tudja végrehajtani az újrarajzolási műveleteket, ami elég kiábrándítóan hat a felhasználókra. Ennek elkerülésére használhatjuk a DoEvents utasítást, vagy alternatív megoldásként megírhatjuk a programrészletet egy, a párhuzamos szálak létrehozását támogató programnyelven és külső függvényként meghívhatjuk azt.

Példa az aktív alkalmazásablak karbantartására hosszú művelet végrehajtása közben:

For L=1 to 100000 Call Szamolj(i) DoEvents Next