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