Procese și fire în winapi

Când o aplicație își începe activitatea, se creează un proces pentru aceasta. De obicei, există un proces pentru fiecare program.

Fluxuri (fire)

Fiecare proces are cel puțin un fir. Până acum, programele noastre au constat într-un proces și un fir. În această lecție vom învăța cum să creați fire suplimentare în acest proces.







Cea mai importantă întrebare cu privire la fluxurile: ceea ce ai nevoie de mai multe fire? fire diferite pot fi executate simultan de diferite nuclee de procesare. De exemplu, în programul nostru de un singur fir, o singură funcție calculează inteligența artificială, iar celălalt - fizica interacțiunea dintre obiecte. În acest caz, o funcție va fi executată mai întâi și apoi al doilea. Dacă vom împărți programul în două procese, și executați programul pe un procesor dual-core, inteligența artificială și fizica vor fi calculate simultan.

Din punctul de vedere al C ++, un fir este o funcție obișnuită care are un anumit prototip. Pentru a crea un fir, utilizați funcția CreateThread.

Crearea de fire - CreareThread

Funcția CreateThread returnează un descriptor de flux:

? 1 MÂNER WinAPI CreateThread (LPSECURITY_ATTRIBUTES lpThreadAttributes, size_t dwStackSize, LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter, DWORD dwCreationFlags, LPDWORD lpThreadId); 1!







1. lpThreadAttributes - acest argument specifică dacă fluxul creat pentru a fi moștenită de copil. Nu vom crea procese copil, reglate astfel NULL.

2. dwStackSize - mărimea stivei în octeți. Dacă treceți 0, se va utiliza valoarea implicită (1 megabyte).

4. lpParameter - un pointer la o variabilă care va fi trecută în flux.

5. dwCreationFlags - creați steaguri. Aici puteți să amânați executarea firului. Vom rula imediat firul, vom trece 0.

6. lpThreadId este un pointer la o variabilă unde ID-ul thread-ului va fi stocat. Nu avem nevoie de un identificator, trecem NULL.

Să ne uităm la codul de apel CreateThread:

? 1 MÂNER fir = CreateThread (NULL, 0, thread2, NULL, 0, NULL); 1!

Funcția de curgere trebuie să corespundă prototipului următor:

1? DWORD WINAPI ThreadProc (LPVOID lpParametru)? 1!

Argumentul că această funcție poate fi preluat este transferat la al patrulea parametru al funcției CreateThread. Dacă renunți la toate suprascrierile de tip, atunci acest prototip arată astfel:

1? Nesemnat __stdcall lung ThreadProc (void * lpParameter)? 1!

În cele din urmă, luați în considerare un exemplu de creare a unui al doilea fir:

Crearea unui program cu două fire

Codul programului poate fi descărcat la începutul lecției. Acesta este un program simplu de consolă. Pentru a lucra cu fire, trebuie să includeți fișierul windows.h. Luați în considerare codul principal:

1 - fișier WINAPI DWORD 2 (LPVOID); int main ()





Trimiteți-le prietenilor: