summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorchristian linke <christian.linke@bmw.de>2012-11-29 16:00:05 +0100
committerchristian linke <christian.linke@bmw.de>2012-11-29 16:00:05 +0100
commit104255615d643a2278d8430a876413793563ab36 (patch)
tree2c668a14657fdf14fae39ecfd583b75dc69bc1da /include
parent5bdad323a9b70758b1076cdef1622d71325d2e52 (diff)
downloadaudiomanager-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.h56
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