utódfolyamatok

Mi történik, ha a folyamat befejeződött

De ez történik.

1. Teljesítmény összes áramlik a folyamat megszakad

2. Minden felhasználó- és GDI-objektumok által létrehozott eljárás, kiesik, és a mag obeyuy zárt (ha nem ispolzuetdrugoy folyamat).

3. A folyamat kilépési kód értéke változik STILL_ACTIVE a kódolt jelet ny ExitProcess vagy TerminateProcess.

4. Object core „folyamat” megy a tétlen, vagy osztott (jelzett), amely yanie (Tovább ebben a témában, lásd 9. fejezet) Egyéb folyamok a rendszer leáll és annak végrehajtási befejezéséig a folyamatot.

5. Counter nucleus tárgy „folyamat” csökkentjük 1

Kapcsolódik a folyamat befejezése kernel objektum nem engedni, amíg le nem zárják és linkeket, hogy másik folyamat. Abban az időben a folyamat befejezését, a rendszer automatikusan csökkenti a használat száma 1 tárgy és a tárgy megsemmisül, amint a számláló is nullázódik. Ezen túlmenően, a zárási folyamat automatikusan nem teljes a folyamatok általuk generált

Befejezése után a folyamat azonosítója, valamint a források azt törlődik a memóriából. Azonban az a terület rendelt memória a rendszer kernel objektum „folyamat”, nem mester bozhdaetsya amíg a gróf a számát a felhasználók elérte a nullát Ez a pro gyerek, amikor az összes többi folyamatot hoznak létre vagy nyitott jellemzőket tartalmaz a most-on Coyne folyamat értesíti a rendszer (a hívó CloseHandle), amely összeköti pas Ebben a folyamatban már nincs szükség.

Descriptors kitöltött protsessse már Myalo mik alkalmas. Kivéve, hogy a ródium sumer eljárás meghívásával GetExitCodeProcess, akkor proverig, hogy a folyamat által azonosított paramétert hProcess befejeződött, és ha igen, határozza meg a kód Zavar sheniya:

BOOL GetExitCodeProcess (fogantyú hProcess, PDWORD pdwExitCode);

befejezés kódot ad vissza, mint egy DWORD értéket mutatott pdwExitCode. Ha pas a hívás időpontjában GetExitCodeProcess folyamat még nem fejeződött be, a DWORD lépett STILL_ACTIVE azonosítója (definíció szerint 0x103), és ha elpusztul, akkor a függvény a tényleges kódot befejezését.

Talán úgy gondolja, hogy írhatsz kódot, amely időszakosan vyzy GetExitCodeProcess oldali funkció, és ellenőrzi a visszatérési érték, ami meghatározza az időben a folyamat befejezése. Elvileg egy ilyen kód működik sok esetben, de az op nem lenne hatékony. Hogyan lehet megoldani ezt a problémát, azt megbeszéljük a következő fejezetben.

Amikor a fejlődő alkalmazások gyakran kell, hogy valamiféle működési vypol nyál más kódtömb. Így - ha akarjuk, akár nem -, hogy állandóan vyzy Vat funkció vagy alprogramot. De a függvényhívás vezet a felfüggesztés a teljesítését a alapkódja a programot a visszatérés a hívott függvény megváltoztathatja natív módon - vállalják, hogy csinál valami művelet egy másik szál a folyamat (flow, persze, először létre kell hoznia). Ez lehetővé teszi,

liter fő kód a program, hogy folytassa munkáját abban az időben, mint egy további folyam más műveletet végrehajtani. A recepció nagyon kényelmes, de ha a fő áramlási th kell tudni az eredményeket egy másik szál, akkor nem kerülheti el kapcsolatos problémák időzítés.

postafiókok (mailslots), stb, és az egyik legkényelmesebb módja, amely a megosztott adatokhoz való hozzáférés -. fájlmegosztás, proxy vetített a memóriában (memórialeképezésesek fájlok) (Bővebben erről a témáról, lásd a 17. fejezetben).

Ha azt szeretnénk, hogy hozzon létre egy új eljárást annak érdekében, hogy végezze Kakisa Lake egy rádiós és várja meg a találatok között, kódot írni, mint ez

// gyermek folyamat

BOOL fSuccess = CreateProcess (. pi>;

// bezárja a fogantyút folyni, amint a szükség úgy eltűnik!

// felfüggeszti végrehajtását a szülő folyamat,

// végéig a gyermek folyamat

WaitForSingleObject (pi hProcess, INFINlTI);

// gyermek folyamat befejeződött; Kapunk kódkiegészítést

// bezárja a fogantyút a folyamatot, amint nincs rá szükség!

Ebben a kódot, hoztunk létre egy új folyamat, és ha sikeres, a nevezett funkció WaitForSingleQbject

DWORD WaitForSingleObject (fogantyú hObject, DWORD dwTimeOut);

A részletes vizsgálata ezt a funkciót el kell halasztani, amíg a fej 0, és most szorítkozunk fejében Function késedelem kódfuttatást ig

amíg az objektum definiált paraméter bObject, nem fog menni a szabad (készenléti) állapotban van. Object „folyamat” megy ebbe az állapotba a végén ezen felhívás WaitForSingleObject felfüggeszti a menet a szülő folyamat befejezéséig a gyermek folyamatokat. Amikor WaitForSingleObject visszatér, megtudhatja a kódot a gyermek folyamat révén a függvény Get ExitCodeProcess.

Hozzáférés CloseHandle a fenti kódrészlet felett hatására a rendszer csökkenti a számlálók értéke mu tárgyak „stream” és a „folyamat” nulla, és ezáltal felszabadítja a memóriát foglalja el ezeket a tárgyakat.

Lehet, hogy észrevette, hogy ebben a szakaszban Becsuktam a fogantyút a kernel objektum „elsődleges flow” (amely a gyermek folyamat) közvetlenül visszatérése után CreateProcess. Ez nem vezet a befejezése az elsődleges adatfolyam a leányvállalata PROTSES ca - csupán csökkenti a kapcsolódó számláló objektumot. És ez az, amiért ez történik

- és az úton, sőt ösztönözni kell csinálni - vagyis egyértelmű lesz a példa egy elsődleges. Tegyük fel, hogy a primer áramlási gyermek folyamat generálja másik áramának, majd megszünteti magát. Ezen a ponton a rendszer kiadja a tárgy „elsődleges flow” gyermek folyamat a memóriában, ha a szülő a folyamat nem egy leíró ezt a tárgyat. De ha a szülő egy ilyen leíró, a rendszer nem lesz képes eltávolítani a tárgyat a memóriában, amíg a szülő folyamat bezárja leíró.

Futó külön utódfolyamatok

Mondj, amit akarsz, de a legtöbb alkalmazás is generál egyéb folyamatok, mint egy izolátum lennye (szabadon álló folyamatok) Ez azt jelenti, hogy miután létrehozása és kezdődik egy új eljárás a szülő folyamat nem kell kommunikálni vele, vagy várja meg, amíg be nem fejeződik a munka és pontosan működik Explorer: elindítja új eljárás a felhasználó, és akkor nem érdekli, hogy mi történik velük.

Vágja le a köldökzsinór összekötő Explorer c gyermek folyamatot, szükség van (meghívásával CloseHandle) zárják be a jellemzőket kapcsolatos új eljárás és annak elsődleges áramlási részlet azt mutatja be, hogyan, hozzon létre egy folyamat, hogy elkülönítve

BOOL fSuccess = CreateProcess (. pi); if (fSuccess)

Kapcsolódó cikkek