Gyermek folyamatok - studopediya

Amikor a fejlődő alkalmazások gyakran kell, hogy valamiféle végrehajtott művelet egy másik kódot blokk. Így - ha akarjuk, akár nem - van, hogy állandóan függvényeket hívnak vagy szubrutinok. De a függvényhívás felfüggeszti végrehajtását fő kód a program a visszatérés a hívott függvény Alternatív módszer - transzfer teljesítménye néhány művelet egy másik szál a folyamat (flow, persze, először létre kell hoznia). Ez lehetővé teszi a 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ő stream kell tudni az eredményeket egy másik szál, nem elkerülni kapcsolatos problémák időzítés.

Ha azt szeretnénk, hogy hozzon létre egy új folyamat, és ez végez semmilyen rádiós és várni az eredményeket, akkor kódot, mint ez:

Ebben a részlet, hoztunk létre egy új folyamat, és ha sikeres, okoztak WaitForSingleObject funkció:

DWORD WaitForSingleObject (fogantyú hObject, DWORD dwTimeOut);

Funkció felfüggeszti végrehajtását a kódot, amíg az objektum által meghatározott paraméter hObject, 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, akkor uznaet kódot a gyermek folyamat révén a függvény Get ExitCodeProcess.

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

Ez könnyű észrevenni, hogy ez a töredék kernel objektum leíró „elsődleges közvetítés” (tulajdonosa a gyermek folyamat) lezárták után azonnal a visszatérés CreateProcess. Ez nem vezet a befejezése a primer áram gyermek folyamat - csak csökkenti a számláló társított objektumot. És ez az, amiért ez történik -, és mellesleg még arra ösztönzik, hogy nem - 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ő folyamat nem egy fogantyú az objektumot. 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ó.

Kapcsolódó cikkek