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 ()