Użycie wątków C++



1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#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ł: