kamilosxd678

Rozproszone - watki

Apr 9th, 2013
152
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 3.52 KB | None | 0 0
  1. #include <windows.h>
  2. #include <stdio.h>
  3. #include <conio.h>
  4. #include <time.h>
  5. #include <random>
  6. #include <string>
  7. //---------------------------------------------------------------------------
  8. #pragma argsused
  9. // priorytety wątków
  10. int priorytety[3] = { THREAD_PRIORITY_BELOW_NORMAL,
  11. THREAD_PRIORITY_NORMAL, THREAD_PRIORITY_ABOVE_NORMAL
  12. };
  13. HANDLE watki[200]; // dojścia (uchwyty) wątków
  14. // deklaracja funkcji wątku
  15. int numerki[200];
  16. DWORD WINAPI funkcja_watku( void* numer );
  17. void gotoxy(int x, int y)
  18. {
  19.   COORD c;
  20.   c.X = x - 1;
  21.   c.Y = y - 1;
  22.   SetConsoleCursorPosition (GetStdHandle(STD_OUTPUT_HANDLE), c);
  23. }
  24. int myjnia = -1;
  25. int stany[200]={0};
  26. int eugenia = 0;
  27. int wypisywanie = 0;
  28. void wypisz(int numer, int stan){
  29.     gotoxy(1,9+numer);
  30.     printf("                                                         \n");
  31.     gotoxy(1,9+numer);
  32.     if(stan == 0)
  33.         printf( "Jezdze sobie Ja, samochod numer %d\n", numer );
  34.     if(stan == 1)
  35.         printf( "Stoje sobie Ja, samochod numer %d\n", numer );
  36.     if(stan == 2)
  37.         printf( "Korzystam sobie z myjni Ja, samochod numer %d\n", numer );
  38.     if(stan == 3)
  39.         printf( "Ja, samochod numer %d poleglem w bitwie o myjnie\n", numer );
  40. }
  41. void odswiez(){
  42.     if(!wypisywanie){
  43.         wypisywanie = 1;
  44.         gotoxy(1,8);
  45.         if(myjnia != -1)
  46.             printf("Myjnia zajeta          ");
  47.         else
  48.             printf("Myjnia jest pusta      ");
  49.         for(int i = 0; i < eugenia; i++){
  50.             wypisz(i+1, stany[i]);
  51.         }
  52.         wypisywanie = 0;
  53.     }
  54. }
  55.  
  56.  
  57. //---------------------------------------------------------------------------
  58. int main(int argc, char **argv)
  59. {
  60.     int i;
  61.     DWORD id; // identyfikator wątku
  62.     system("cls");
  63.     printf("Podaj ilosc samochodzikuff: \n");
  64.     scanf("%d", &eugenia);
  65.     printf( "Samosmrodki startuja, bedzie jezdzic %d samosmrodkow\n", eugenia);
  66.     for (int i = 0; i < eugenia; i++){
  67.         numerki[i] = i+1;
  68.     }
  69.     system("cls");
  70.     // tworzenie wątków
  71.     for( i = 0; i < eugenia; i++ )
  72.     {
  73.         watki[i] = CreateThread(
  74.         NULL, // atrybuty bezpieczeństwa
  75.         0, // inicjalna wielkość stosu
  76.         funkcja_watku, // funkcja wątku
  77.         (void *)&numerki[i],// dane dla funkcji wątku
  78.         0, // flagi utworzenia
  79.         &id );
  80.         if( watki[i] != INVALID_HANDLE_VALUE )
  81.         {
  82.             printf( "Utworzylem samochod o identyfikatorze %x\n", id );
  83.             // ustawienie priorytetu
  84.             SetThreadPriority( watki[i],THREAD_PRIORITY_NORMAL );
  85.         }
  86.     }
  87.     Sleep( 20000 ); // uśpienie wątku głównego na 20 s
  88.     system("pause");
  89.     return 0;
  90. }
  91. //---------------------------------------------------------------------------
  92. // trzy takie funkcje pracują współbieŜnie w programie
  93. DWORD WINAPI funkcja_watku( void* numerek )
  94. {
  95.     srand (time(NULL));
  96.     int moj_numerek = *((int*)numerek);
  97.     unsigned int licznik = 0;
  98.     int szatan;
  99.     // rzutowanie struktury na własny wskaźnik
  100.     Sleep( 1000 );
  101.     // praca, wątki sa terminowane przez zakończenie programu
  102.     // - funkcji main
  103.     while( 1 )
  104.     {
  105.         szatan = rand() % 3;
  106.         //gotoxy( licznik++ / 5000 + 5, moje_dane->parametr );
  107.         if(szatan == 0){
  108.             if(myjnia == moj_numerek){
  109.                 myjnia = -1;
  110.             }
  111.             stany[moj_numerek] = 0;
  112.                 odswiez();
  113.             Sleep(((rand()%5)+5)*1000);
  114.         }
  115.         else if(szatan == 1){
  116.             if(myjnia == moj_numerek){
  117.                 myjnia = -1;
  118.             }
  119.             stany[moj_numerek] = 1;
  120.                 odswiez();
  121.             Sleep(((rand()%3)+3)*1000);
  122.         }
  123.         else {
  124.             if(myjnia == -1 || myjnia == moj_numerek){
  125.                 myjnia = moj_numerek;
  126.                 stany[moj_numerek] = 2;
  127.                 odswiez();
  128.                 Sleep(((rand()%3)+4)*1000);
  129.             }
  130.             else
  131.             {
  132.                 stany[moj_numerek] = 3;
  133.                 odswiez();
  134.                 Sleep(((rand()%3)+4)*1000);
  135.             }
  136.         }
  137.     }
  138.     return 0;
  139. }
Advertisement
Add Comment
Please, Sign In to add comment