Thread.h 3.7 KB

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