Thread.h 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. #ifndef Thread_H
  2. #define Thread_H
  3. #include <condition_variable>
  4. #include "Array.h"
  5. #include "ReferenceCounter.h"
  6. namespace Framework
  7. {
  8. class Thread;
  9. class Critical;
  10. //! Ein neuer Thread wie die Thread Klasse aus Java
  11. class Thread : public virtual ReferenceCounter
  12. {
  13. private:
  14. pthread_t* threadHandleSys;
  15. int lockCount;
  16. const char* name;
  17. protected:
  18. unsigned long threadId;
  19. pthread_t threadHandle;
  20. bool run;
  21. public:
  22. //! Konstruktor
  23. DLLEXPORT Thread();
  24. //! Destruktor
  25. DLLEXPORT virtual ~Thread();
  26. //! Startet den neuen Thread
  27. DLLEXPORT void start();
  28. #ifdef WIN32
  29. //! Pausiert den Thread (Nur für Windows)
  30. DLLEXPORT void pause();
  31. //! Setzt den Thread Fort (Nur für Windows)
  32. DLLEXPORT void fortsetzen();
  33. #endif
  34. //! Beendet den Thread
  35. DLLEXPORT void ende();
  36. //! Diese Funktion wird von dem neuen Thread ausgeführt.
  37. DLLEXPORT virtual void thread();
  38. //! Diese Funktion wird eufgerufen, nachdem die thread Funktion zuende
  39. //! ist
  40. DLLEXPORT virtual void threadEnd();
  41. //! prüft, ob der Thrad aktiv ist
  42. //! return: true, falls der Thread läuft.
  43. //! false, wenn der Thread beendet, pausiert oder noch nicht
  44. //! gestartet wurde.
  45. DLLEXPORT bool isRunning() const;
  46. //! wartet zeit lang auf den Thread
  47. //! \param zeit Die Zeit, die auf den Thread gewartet werden soll. 1000
  48. //! = 1 Sekunde
  49. DLLEXPORT int warteAufThread(int zeit);
  50. //! Legt einen Frameworkpointer auf ein Threadhandle fest, der auf 0
  51. //! gesetzt wird, falls die Ressourcen des Threads bereits follstänfig
  52. //! aufgeräumt wurden \param ths Ein Zeiger auf ein Threadhandle, das
  53. //! verändert werden soll
  54. DLLEXPORT void setSystemHandlePointer(pthread_t* ths);
  55. //! Gibt ein Handle auf den Thread zurück
  56. DLLEXPORT pthread_t getThreadHandle() const;
  57. // set the name of the thread
  58. DLLEXPORT void setName(const char* name);
  59. // get the name of the thread
  60. DLLEXPORT const char* getName() const;
  61. private:
  62. void addCriticalLock();
  63. void removeCriticalLock();
  64. friend Critical;
  65. };
  66. #ifdef WIN32
  67. //! Diese Funktion wird fon der Thread Klasse benutzt um einen thread zu
  68. //! starten
  69. DLLEXPORT unsigned long __stdcall threadStart(void* param);
  70. #else
  71. //! Diese Funktion wird fon der Thread Klasse benutzt um einen thread zu
  72. //! starten
  73. void* threadStart(void* param); //! startet thread
  74. #endif
  75. //! Eine Klasse, die alle aktuell laufenden Thread Objekte speichert
  76. class ThreadRegister
  77. {
  78. private:
  79. Array<Framework::Thread*> threads;
  80. CRITICAL_SECTION cs;
  81. Array<pthread_t> closedThreads;
  82. public:
  83. //! Konstruktor
  84. ThreadRegister();
  85. //! Destruktor
  86. ~ThreadRegister();
  87. //! Fügt einen neuen Thread hinzu
  88. //! \param t Der Thread, der hinzugefügt werden soll
  89. void add(Thread* t);
  90. //! Entfernt einen neuen Thread
  91. //! \param t Der Thread, der entfernt werden soll
  92. void remove(Thread* t);
  93. //! Überprüft, ob ein Zeiger auf ein gültiges Thread Objekt zeigt, oder
  94. //! ob es schon gelöscht wurde \param t Der Zeiger, der geprüft werden
  95. //! soll
  96. bool isThread(Thread* t);
  97. //! Sucht nach einem bestimmten Thread und gibt das zugehörige Objekt
  98. //! zurück handle: Ein handle zu dem gesuchten Thread
  99. Thread* zThread(pthread_t handle);
  100. //! Setzt Wird automatisch aufgerufen, wenn ein Thread beendet wird. Die
  101. //! Reccourcen werden daraufhin in cleanUpClosedThreads freigegeben.
  102. //! \param handle Das Handle des Threads
  103. void addClosedThread(pthread_t handle);
  104. //! sperrt das register
  105. void lock();
  106. //! entsperrt das register
  107. void unlock();
  108. //! Löscht die bereits beendetetn Threads und gibt ihre Reccourcen
  109. //! wieder frei
  110. DLLEXPORT void cleanUpClosedThreads();
  111. };
  112. } // namespace Framework
  113. #endif