Thread.h 4.0 KB

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