Użycie wątków C++



 

#include <windows.h>
#include <iostream>
#define ILOSC_WATKOW 4//Deklaracja stałej o wartości 4
using namespace std;
//------------------------------------------------------------
DWORD WINAPI funkcja_watku( LPVOID Arg1 )////typ DWORD funkcji o nazwie funkcja_wÄ…tku
{
    int *ile;//deklaracja wskaźnika o nazwie ile 
    ile=(int*)Arg1;//przypisanie wkaźnikowi o nazwie ile wartości ze zmiennej Arg1
    cout<<"Watek nr. "<<*ile<<endl;//wyświetl zmienną o nazwie ile 
    return 0;
}
//------------------------------------------------------


int main()
{
    DWORD TablicaIdWatkow[ILOSC_WATKOW];//deklaracja tablicy o wielkości stałej ILOŚĆ_WATKÓW typu DWORD w której bdą przetrzymywane ID każdego nowoutworzobnego wątku
    HANDLE TablicaUchwytowWatkow[ILOSC_WATKOW];//deklaracja tablicy o stałej wielkości ILOŚĆ WĄTKÓW typ HANDLE, w której będą przetrzymywane uchwyty do wszystkich wątków
    int i, tab[ILOSC_WATKOW];//deklaracja zmiennej i , deklaracja tablicy o wielkości stałej ilości wątków 

    for( i=0; i<ILOSC_WATKOW; i++ )// rozpoczęcie pętli for. Pętla działa dopóki i < od stałej ILOŚĆ_WATKOW
    {
        tab[i]=i+1;//zwiększenie wartości każdego indeksu o 1
        //tworzenie wątku i przypisanie znacznika w tablicy TablicaUchwytówWątków[]
        //funkcja wejściowa uruchamianego wątku o nazwie Funkcja_wątku
        //argument do tej funkcji przekazywany z tablicy tab[],
        //jako ostatni argument podajemy tablicę TablicaIdWatków w której przechowywane są Id każdego uruchamianego wątku
        TablicaUchwytowWatkow[i] = CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)funkcja_watku,&tab[i],0,&TablicaIdWatkow[i]);
        if (i<=1)//jeśli i <=1 
        {//to ustawiamy priorytet większy o 2 od istniejącego
        SetThreadPriority(TablicaUchwytowWatkow[i], THREAD_PRIORITY_HIGHEST);
        }
        if (i>1)//jeśli i >1
        {//to ustawiamy priorytet mniejszy o 2 od istniejÄ…cego
        SetThreadPriority(TablicaUchwytowWatkow[i],THREAD_PRIORITY_LOWEST );
        }        
    }
    WaitForMultipleObjects(ILOSC_WATKOW, TablicaUchwytowWatkow, TRUE, INFINITE);//czekać na utworzenie wszystkich wątków 
    for(i=0; i<ILOSC_WATKOW; i++)
    {
    //pobiera wartość priorytetu i wyświetla na ekranie
     cout <<"prirytet" << GetThreadPriority(TablicaUchwytowWatkow[i])<< "\n";
     //zamyka każdy wątek po kolei
    CloseHandle(TablicaUchwytowWatkow[i]);
    }
    system("pause");
}



Dział: