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ł: