Thread.h 3.4 KB

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