Atunci când dezvoltarea de aplicații de multe ori nevoie pentru a obține un fel de operațiune efectuată un alt bloc de cod. Deci - o vrei sau nu - trebuie să apelați în mod constant funcții sau subrutine. Dar apelul funcției suspendă executarea codului principal al programului la întoarcerea numită funcția Metodă alternativă - Performanța de transfer a unor operațiuni de către un alt fir în cadrul procesului (fluxul, desigur, trebuie să creați mai întâi). Acest lucru va permite codul principal al programului să-și continue activitatea la momentul respectiv, ca un flux suplimentar va efectua o altă operație. Recepția este foarte convenabil, dar atunci când fluxul principal trebuie să cunoască rezultatele unui alt fir, nu evita problemele asociate cu calendarul.
Dacă doriți să creați un nou proces și să-l efectueze orice operator de radio și așteptați pentru rezultate, puteți folosi codul ca aceasta:
În acest fragment, am creat un nou proces și, în caz de succes, au cauzat funcția WaitForSingleObject:
DWORD WaitForSingleObject (HANDLE hObject, DWORD dwTimeOut);
Funcția suspendă executarea codului, atâta timp cât obiectul este definit de un parametru hObject, nu va merge la liber starea (mers în gol). Obiectul „proces“ se înscrie în această stare la capătul său cu privire la această WaitForSingleObject apel suspendă firul procesului părinte până la finalizarea proceselor sale de copil. Când WaitForSingleObject se întoarce, puteți uznaet cod al procesului de copil prin intermediul funcției Get ExitCodeProcess.
Accesarea CloseHandle în fragmentul de cod de mai sus determină sistemul pentru a reduce contoarele de mai sus obiecte „stream“ și „proces“ la zero, și astfel eliberează memoria ocupată de aceste obiecte.
Este ușor de observat că, în acest fragment de nucleu descriptor obiect „fluxul principal“ (deținut de procesul de copil) a fost închis imediat după întoarcerea de la CreateProcess. Acest lucru nu duce la finalizarea procesului de primar copil curent - pur și simplu reduce contorul asociat cu obiectul menționat. Și asta este motivul pentru care se face - și de modul în care, chiar încurajate să facă - adică, va fi clar din exemplul unui prim. Să presupunem că procesul de copil flux primar generează un alt flux, iar apoi se termină. În acest moment, sistemul poate elibera „flux primar“ procesul copil obiect în memorie, în cazul în care procesul părinte nu are un mâner al obiectului. Dar dacă părintele are un astfel de descriptor, sistemul nu va fi capabil de a elimina obiectul din memorie, atâta timp cât procesul părinte se închide descriptor său.