You.i Engine
YiSignalHandler.h
Go to the documentation of this file.
1 // © You i Labs Inc. 2000-2017. All rights reserved.
2 #ifndef _YI_SIGNAL_HANDLER_H_
3 #define _YI_SIGNAL_HANDLER_H_
4 
5 #include "thread/YiThread.h"
7 #include "utility/YiLazy.h"
8 
9 #define YI_RANDOM_SLEEP(X) YI_SLEEP(((rand() % 5) + 1) * (X))
10 
11 class CYISignalBase;
12 
175 {
176  friend class CYISignalBase;
177 
178 public:
180  CYISignalHandler(const CYISignalHandler &rSignalHandler);
181  virtual ~CYISignalHandler();
182  CYISignalHandler &operator=(const CYISignalHandler &rSignalHandler);
183 
257  void MoveToThread(CYIThread *pThread);
258 
271 
284  void SetThreadAffinity(const CYIThreadHandle &rThreadAffinity);
285 
294  virtual bool IsConnected() const;
295 
334  virtual bool IsConnected(const CYISignalBase &rSignal) const;
335 
348  void Disconnect(CYISignalBase &rSignal);
349 
359 
360 private:
361  enum YI_NOTIFY_FLAG
362  {
363  YI_DO_NOT_NOTIFY = 0x0,
364  YI_NOTIFY = 0x1,
365  };
366 
367  struct HandlerObjects
368  {
369  HandlerObjects();
370 
371  mutable CYIRecursiveMutex m_handlerMutex;
372  std::vector<CYISignalBase *> m_signalList;
373  CYIThread *m_pThreadOverride;
374  };
375 
376  void AddSignal(CYISignalBase &rSignal) const;
377  void RemoveSignal(CYISignalBase &rSignal, YI_NOTIFY_FLAG notifySignal);
378  void RemoveAllSignals(YI_NOTIFY_FLAG notifySignal);
379  bool HasSignal(const CYISignalBase &rSignal) const;
380  void CopySignalHandler(const CYISignalHandler &rSignalHandler);
381 
382  void ExclusiveLock(CYIRecursiveMutex &rHandlerMutex) const;
383  void ExclusiveLock(const CYISignalBase &rSignal, CYIRecursiveMutex &rHandlerMutex) const;
384  void ExclusiveUnlock(CYIRecursiveMutex &rHandlerMutex) const;
385  void ExclusiveUnlock(const CYISignalBase &rSignal, CYIRecursiveMutex &rHandlerMutex) const;
386 
387  virtual void OnThreadDestroyed(CYIThread *pThread) override;
388 
389  CYILazy<HandlerObjects> m_handlerObjects;
390  CYIThreadHandle m_threadAffinity;
391 };
392 
395 #endif /* _YI_SIGNAL_HANDLER_H_ */
void DisconnectFromAllSignals()
CYISignalHandler & operator=(const CYISignalHandler &rSignalHandler)
Definition: YiRecursiveMutex.h:15
The base abstract class for CYISignal.
Definition: YiSignalBase.h:23
void Disconnect(CYISignalBase &rSignal)
Definition: YiSignalHandler.h:174
CYIThreadHandle GetThreadAffinity() const
virtual bool IsConnected() const
Definition: YiThread.h:104
Definition: YiThread.h:86
void MoveToThread(CYIThread *pThread)
This function allows the user to override the default thread affinity to any CYIThread that may or ma...
void SetThreadAffinity(const CYIThreadHandle &rThreadAffinity)
virtual ~CYISignalHandler()
Definition: YiThreadHandle.h:43