main.cpp 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. #include <iostream>
  2. #include <vector>
  3. #include "Thread.h"
  4. using namespace std;
  5. class Multiplicateur : public Thread
  6. {
  7. public:
  8. Multiplicateur(int x, vector<int> *binaire);
  9. void run();
  10. void giveNumber(int nb);
  11. void inventaire();
  12. private:
  13. const int m_x;
  14. vector<int> *m_binaire;
  15. };
  16. Multiplicateur::Multiplicateur(int x, vector<int> *binaire) : m_x(x), m_binaire(binaire)
  17. {
  18. createLockMutex("nb");
  19. unlockMutex("nb");
  20. }
  21. void Multiplicateur::run()
  22. {
  23. while (1==1) giveNumber(m_x);
  24. }
  25. void Multiplicateur::giveNumber(int nb)
  26. {
  27. if ( lockMutex("nb") )
  28. {
  29. m_binaire->push_back(nb);
  30. unlockMutex("nb");
  31. }
  32. }
  33. void inventaire(vector<int> *binaire)
  34. {
  35. int nb[3];
  36. nb[0] = nb[1] = nb[2] = 0;
  37. while (!binaire->empty())
  38. {
  39. nb[(*binaire)[binaire->size()-1]]++;
  40. binaire->pop_back();
  41. }
  42. cout << "Il y a eu "<<nb[0]<<"x0 et "<<nb[1]<<"x1 et "<<nb[2]<<"x2."<<endl;
  43. }
  44. int main()
  45. {
  46. cout << "Test de la classe Thread développée par Nathan Touroux." << endl;
  47. vector<int>* tableau(0);
  48. tableau = new vector<int>(0);
  49. Multiplicateur process1(1, tableau), process2(2, tableau);
  50. process1.start();
  51. process2.start();
  52. for (int i(0); i<10000; i++) process1.giveNumber(0);
  53. process1.stop();
  54. process2.stop();
  55. inventaire(tableau);
  56. delete tableau;
  57. return 0;
  58. }