diff options
author | christian linke <christian.linke@bmw.de> | 2012-11-29 16:00:05 +0100 |
---|---|---|
committer | christian linke <christian.linke@bmw.de> | 2012-11-29 16:00:05 +0100 |
commit | 104255615d643a2278d8430a876413793563ab36 (patch) | |
tree | 2c668a14657fdf14fae39ecfd583b75dc69bc1da /include | |
parent | 5bdad323a9b70758b1076cdef1622d71325d2e52 (diff) | |
download | audiomanager-104255615d643a2278d8430a876413793563ab36.tar.gz |
* make AudioManager rundown cleaner. Now an extra created pipe is used to trigger the mainloop one last time before the AudioManager exits.
Signed-off-by: christian linke <christian.linke@bmw.de>
Diffstat (limited to 'include')
-rw-r--r-- | include/shared/CAmSocketHandler.h | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/include/shared/CAmSocketHandler.h b/include/shared/CAmSocketHandler.h index 990ef0f..1c3383d 100644 --- a/include/shared/CAmSocketHandler.h +++ b/include/shared/CAmSocketHandler.h @@ -111,6 +111,40 @@ public: class CAmSocketHandler { public: + template<class TClass> class TAmShPollFired: public IAmShPollFired + { + private: + TClass* mInstance; + void (TClass::*mFunction)(const pollfd pollfd, const sh_pollHandle_t handle, void* userData); + + public: + TAmShPollFired(TClass* instance, void (TClass::*function)(const pollfd pollfd, const sh_pollHandle_t handle, void* userData)) : + mInstance(instance), // + mFunction(function) {}; + + virtual void Call(const pollfd pollfd, const sh_pollHandle_t handle, void* userData) + { + (*mInstance.*mFunction)(pollfd, handle, userData); + }; + }; + + template<class TClass> class TAmShPollCheck: public IAmShPollCheck + { + private: + TClass* mInstance; + bool (TClass::*mFunction)(const sh_pollHandle_t handle, void* userData); + + public: + TAmShPollCheck(TClass* instance, bool (TClass::*function)(const sh_pollHandle_t handle, void* userData)) : + mInstance(instance), // + mFunction(function) {}; + + virtual bool Call(const sh_pollHandle_t handle, void* userData) + { + return ((*mInstance.*mFunction)(handle, userData)); + }; + }; + CAmSocketHandler(); ~CAmSocketHandler(); @@ -124,7 +158,29 @@ public: am_Error_e stopTimer(const sh_timerHandle_t handle); void start_listenting(); void stop_listening(); + void exit_mainloop(); + static void static_exit_mainloop(); + void receiverCallback(const pollfd pollfd, const sh_pollHandle_t handle, void* userData) + { + (void) pollfd; + (void) handle; + (void) userData; + }; + bool checkerCallback(const sh_pollHandle_t handle, void* userData) + { + (void) handle; + (void) userData; + return (false); + }; + + TAmShPollFired<CAmSocketHandler> receiverCallbackT; + TAmShPollCheck<CAmSocketHandler> checkerCallbackT; + private: + + static CAmSocketHandler* mInstance; + int mPipe[2]; + struct sh_timer_s //!<struct that holds information of timers { sh_timerHandle_t handle; //!<the handle of the timer |