RenderThread.h 3.5 KB

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