Folyamatok és szálak (cérnák) a WinAPI

Amikor az alkalmazás megkezdi működését, a folyamat (process) jön létre a számára. Normális esetben minden program megfelel egy folyamat.

Streams (szálak)

Minden folyamat legalább egy szál (menet). Eddig, a program állt egy folyamat, és egy szál. Ebben a leckében megtanuljuk, hogyan kell létrehozni a további szálak a folyamatban.

A legfontosabb kérdés flow: amire szüksége van több szálat? Különböző szálak lehet végrehajtani egyidejűleg különböző processzor magok. Például a mi egyszálú programot, egy függvény a mesterséges intelligencia, és a többi - a fizika a kölcsönhatás tárgyak. Ebben az esetben a funkció végrehajtásra kerül az első, majd a második. Ha elosztjuk a programot két folyamat, és futtassa a programot egy dual-core processzor, a mesterséges intelligencia és a fizika kiszámításra kerül egyszerre.

A szempontból C ++ áramot - ez egy közös vonása van egy sajátos prototípus. Ahhoz, hogy hozzon létre egy szál segítségével CreateThread funkciót.

Létrehozása patakok - CreateThread

CreateThread függvény egy kart a falon:

1? FOGANTYÚS WinAPI CreateThread (LPSECURITY_ATTRIBUTES lpThreadAttributes, size_t dwStackSize, LPTHREAD_START_ROUTINE lpStartAddress, LPVOID lpParameter, DWORD dwCreationFlags, LPDWORD lpThreadId)? 1!

1. lpThreadAttributes - ez az érv megadja, hogy a létrehozott adatfolyam a gyerek által örökölt. Nem fogunk létrehozni utódfolyamatok, így NULL készlet.

2. dwStackSize - verem mérete byte-ban. Ha át 0, akkor használja az alapértelmezett értéket (1 megabájt).

4. lpParameter - egy mutatót a változó, ami átkerül a falon.

5. dwCreationFlags - hozza létre zászlók. Akkor elhalasztja a dob a végrehajtás áramlását. Mi fog futni a közvetítés azonnal peredaom 0.

6. lpThreadId - egy mutatót a változó, amely tárolja szálazonosítóból. Nem kell azonosító, peredaom NULL.

Nézzük meg a kódot, hogy hívja CreateThread:

1? FOGANTYÚS menet = CreateThread (NULL, 0, thread2, NULL, 0, NULL);? 1!

Flow funkció kell egyeznie a következő prototípus:

1? DWORD WinAPI ThreadProc (LPVOID lpParameter)? 1!

Az az érv, hogy sor kerül negyedik helyezett paraméterek CreateThread funkciót. Ha elutasítjuk minden típusú felülírás ez a prototípus néz ki:

1? Jelöletlen hosszú __stdcall ThreadProc (void * lpParameter)? 1!

Végül figyelembe vesszük a példát: létrehozunk egy második folyam:

Program létrehozása két cérnával

A programkód lehet letölteni elején a leckét. Ez egy egyszerű konzol programot. Streaming kell tartalmaznia windows.h fájlt. Tekintsük az alapvető kód:

1 DWORD WinAPI thread2 (LPVOID) ?; int main ()