RenderThread.h 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. #ifndef RenderThread_H
  2. #define RenderThread_H
  3. #include "Thread.h"
  4. #include "Critical.h"
  5. #include <functional>
  6. namespace Framework
  7. {
  8. class Bildschirm; //! Bildschirm.h
  9. class ZeitMesser; //! ZeitMesser.h
  10. class Bild; //! Bild.h
  11. //! Ein Thread, der ein Bildschirm verwaltet. Er ruft die render() und tick() funktionen automatisch auf
  12. class RenderTh : public Thread
  13. {
  14. private:
  15. bool stoppen;
  16. Bildschirm *bildschirm;
  17. ZeitMesser *zeit;
  18. double renderTickZeit;
  19. void *renderParameter;
  20. void *tickParameter;
  21. std::function< void( void*, void*, Bild* ) > renderFunktion;
  22. std::function< void( void*, void*, double ) > tickFunktion;
  23. bool pause;
  24. Critical cs;
  25. int maxFps;
  26. bool quiet;
  27. public:
  28. //! Konstruktor
  29. DLLEXPORT RenderTh();
  30. //! Destruktor
  31. DLLEXPORT ~RenderTh();
  32. //! Dies ist notwendig, falls mehrere Threads gleichzeitig das Objekt benutzen.
  33. //! Wenn lock() von zwei threads aufgerufen wird, wartet der letzte so lange, bis der erste unlock() aufgerufen hat.
  34. DLLEXPORT void lock();
  35. //! Dies ist notwendig, falls mehrere Threads gleichzeitig das Objekt benutzen.
  36. //! Wenn lock() von zwei threads aufgerufen wird, wartet der letzte so lange, bis der erste unlock() aufgerufen hat.
  37. DLLEXPORT void unlock();
  38. //! Setzt das Bildschirm Objekt, das verwaltet werden soll
  39. //! \param bildschirm Der Bildschirm
  40. DLLEXPORT void setBildschirm( Bildschirm *bildschirm );
  41. //! Die Funktion, die automatisch in einem neuen Thread ausgeführt wird
  42. DLLEXPORT void thread() override;
  43. //! Beginnt den Render Thread
  44. DLLEXPORT void beginn();
  45. //! Beendet den Render Thread
  46. DLLEXPORT void beenden();
  47. //! if true, then nothing will be printent to std::cout
  48. DLLEXPORT void setQuiet(bool quiet);
  49. //! Setzt die maximalen Bilder pro Sekunde
  50. //! \param fps maximale Bilder pro Sekunde
  51. DLLEXPORT void setMaxFps( int fps );
  52. //! Pausiert den Render Thread
  53. //! \param p 1, wenn der Thread pausiert werden soll
  54. DLLEXPORT void setPause( bool p );
  55. //! Setzt die Rückruffunktion, die immer vor dem Zeichnen aufgerufen wird
  56. //! \param rF Die Rückruffunktion
  57. DLLEXPORT void setRenderFunktion( std::function< void( void*, void*, Bild* ) > rF );
  58. //! Setzt die Rückruffunktion, die immer vor dem Aktualisieren aller Objekte aufgerufen wird
  59. //! \param tF Die Rückruffunktion
  60. DLLEXPORT void setTickFunktion( std::function< void( void*, void*, double ) > tF );
  61. //! Setzt den Parameter der Rückruffunktion, die immer vor dem Zeichnen aufgerufen wird
  62. //! \param p Der Parameter
  63. DLLEXPORT void setRenderFunktionParameter( void *p );
  64. //! Setzt den Parameter der Rückruffunktion, die immer vor dem Aktualisieren aller Objekte aufgerufen wird
  65. DLLEXPORT void setTickFunktionParameter( void *p );
  66. //! Gibt den Bildschirm zurück, der von dem Thread verwaltet wird
  67. DLLEXPORT Bildschirm *getBildschirm() const;
  68. //! Gibt den Bildschirm ohne erhöhten Reference Counter zurück, der von dem Thread verwaltet wird
  69. DLLEXPORT Bildschirm *zBildschirm() const;
  70. //! Gibt die Zeit zurück, mit der die tick() Funktion des Bildschirms als letztes aufgerufen wurde
  71. DLLEXPORT double getRenderTickZeit() const;
  72. };
  73. }
  74. #endif