Advertisement
webmanix

Threads com critical section

May 1st, 2014
294
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.16 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <windows.h>
  3.  
  4. unsigned int sincronizadorInicial;
  5. CRITICAL_SECTION regulador;
  6.  
  7. int quantidade    = 15;
  8. int progresso     = 45;
  9. int intervalo     = 100;
  10. int esperaInicial = 750;
  11.  
  12. void zThread(int tId)
  13. {
  14.     WaitForSingleObject(sincronizadorInicial, -1);
  15.     COORD p;
  16.     p.Y = tId;
  17.     int i;
  18.     for(i=0;i<progresso;i++)
  19.         {
  20.             p.X = i;
  21.  
  22.             EnterCriticalSection(&regulador);
  23.             {
  24.                 SetConsoleCursorPosition(GetStdHandle(-11), p);
  25.                 printf("#", i);
  26.             }
  27.             LeaveCriticalSection(&regulador);
  28.  
  29.             Sleep(intervalo);
  30.         }
  31. }
  32.  
  33. int main()
  34. {
  35.     AllocConsole();
  36.  
  37.     int ThreadIds;
  38.  
  39.     InitializeCriticalSection(&regulador);
  40.     sincronizadorInicial = CreateSemaphore(0, 0, quantidade, 0);
  41.  
  42.     for(ThreadIds=0;ThreadIds<quantidade;ThreadIds++)
  43.     {
  44.         CreateThread(0, 0, zThread, ThreadIds, 0, 0);
  45.     }
  46.  
  47.     int a;
  48.  
  49.     for(a=0;a<4;a++)
  50.     {
  51.         Sleep(esperaInicial);
  52.         printf("%d...\n", a+1);
  53.     }
  54.  
  55.     ReleaseSemaphore(sincronizadorInicial, quantidade, 0);
  56.  
  57.     while(1)
  58.         Sleep(1000);
  59. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement