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