symbianthreads.h
上传用户:zhongxx05
上传日期:2007-06-06
资源大小:33641k
文件大小:8k
源码类别:

Symbian

开发平台:

C/C++

  1. /* ***** BEGIN LICENSE BLOCK ***** 
  2.  * Version: RCSL 1.0/RPSL 1.0 
  3.  *  
  4.  * Portions Copyright (c) 1995-2002 RealNetworks, Inc. All Rights Reserved. 
  5.  *      
  6.  * The contents of this file, and the files included with this file, are 
  7.  * subject to the current version of the RealNetworks Public Source License 
  8.  * Version 1.0 (the "RPSL") available at 
  9.  * http://www.helixcommunity.org/content/rpsl unless you have licensed 
  10.  * the file under the RealNetworks Community Source License Version 1.0 
  11.  * (the "RCSL") available at http://www.helixcommunity.org/content/rcsl, 
  12.  * in which case the RCSL will apply. You may also obtain the license terms 
  13.  * directly from RealNetworks.  You may not use this file except in 
  14.  * compliance with the RPSL or, if you have a valid RCSL with RealNetworks 
  15.  * applicable to this file, the RCSL.  Please see the applicable RPSL or 
  16.  * RCSL for the rights, obligations and limitations governing use of the 
  17.  * contents of the file.  
  18.  *  
  19.  * This file is part of the Helix DNA Technology. RealNetworks is the 
  20.  * developer of the Original Code and owns the copyrights in the portions 
  21.  * it created. 
  22.  *  
  23.  * This file, and the files included with this file, is distributed and made 
  24.  * available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 
  25.  * EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS ALL SUCH WARRANTIES, 
  26.  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS 
  27.  * FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 
  28.  * 
  29.  * Technology Compatibility Kit Test Suite(s) Location: 
  30.  *    http://www.helixcommunity.org/content/tck 
  31.  * 
  32.  * Contributor(s): 
  33.  *  
  34.  * ***** END LICENSE BLOCK ***** */ 
  35. #ifndef _SYMBIANTHREADSH
  36. #define _SYMBIANTHREADSH
  37. #include "hxthread.h"
  38. #include <e32std.h>
  39. #include <e32base.h>
  40. #include "hxslist.h" // for CHXSimpleList
  41. #include "hxmap.h"    //for CHXMapLongToObj
  42. //=======================================================================
  43. //
  44. //                      HXSymbianMutex
  45. //                   ------------------
  46. //
  47. // NOTE: Mutexs must be recursive.
  48. //=======================================================================
  49. class HXSymbianMutex : public HXMutex
  50. {
  51.   public:
  52.     //Ctors and dtors.
  53.     HXSymbianMutex();
  54.     virtual ~HXSymbianMutex();
  55.     //inherited methods.
  56.     virtual HX_RESULT Lock();
  57.     virtual HX_RESULT Unlock();
  58.     virtual HX_RESULT Trylock();
  59.         
  60. protected:
  61.     HX_RESULT _Init();
  62.     
  63. private:
  64.     RCriticalSection* m_pCritSec;
  65.     BOOL              m_bInited;
  66.     //Symbian mutexes, if that is what you want to call them, are
  67.     //not recursive. We need them to be so we roll our own.
  68.     RCriticalSection* m_pCritSecLck;
  69.     ULONG32           m_ulOwnerThread;
  70.     ULONG32           m_ulLockCount;
  71.     //Prevent unintentional ctors
  72.     HXSymbianMutex( const HXSymbianMutex& ); //copy ctor
  73.     HXSymbianMutex& operator=(const HXSymbianMutex& ); //assignment operator.
  74. };
  75. //=======================================================================
  76. //
  77. //                      HXSymbianEvent
  78. //                   ------------------
  79. //
  80. //=======================================================================
  81. class HXSymbianEvent : public HXEvent
  82. {
  83. public:
  84.     
  85.     HXSymbianEvent(const char* pEventName = NULL, BOOL bManualReset=TRUE);
  86.     virtual ~HXSymbianEvent();
  87.     
  88.     virtual HX_RESULT SignalEvent();
  89.     virtual HX_RESULT ResetEvent();
  90.     virtual void*     GetEventHandle();
  91.     virtual HX_RESULT Wait( UINT32 uTimeoutPeriod = ALLFS );
  92. protected:
  93. private:
  94.     BOOL            m_bIsManualReset;
  95.     BOOL            m_bEventIsSet;
  96.     HXSymbianMutex* m_pCondLock;
  97.     RSemaphore*     m_pCond;
  98.     
  99.     //Protect unintentional ctors
  100.     HXSymbianEvent( const HXSymbianEvent& ); //copy ctor.
  101.     HXSymbianEvent& operator=(const HXSymbianEvent& ); //assignment oper.
  102. };
  103. //=======================================================================
  104. //
  105. //                     HXSymbsymbianisymbiananThread
  106. //                   ------------------
  107. //
  108. //=======================================================================
  109. class HXSymbianThread : public HXThread
  110. {
  111.   public:
  112.     HXSymbianThread();
  113.     virtual ~HXSymbianThread();
  114.     virtual HX_RESULT CreateThread( void*(pExecAddr(void*)),
  115.                                     void* pArg,
  116.                                     ULONG32 ulCreationFlags=0);
  117.     virtual HX_RESULT Suspend();
  118.     virtual HX_RESULT Resume();
  119.     virtual HX_RESULT SetPriority( UINT32 ulPriority);
  120.     virtual HX_RESULT GetPriority( UINT32& ulPriority);
  121.     virtual HX_RESULT YieldTimeSlice();
  122.     virtual HX_RESULT Exit(UINT32 unExitCode);
  123.     //This call returns the CREATED THREAD's ID, not the calling thread's.
  124.     virtual HX_RESULT GetThreadId(UINT32& ulThreadId);
  125.     //This call returns the *CALLING THREAD's ID* not the one that was created.
  126.     virtual ULONG32 GetCurrentThreadID();
  127.     virtual HX_RESULT PostMessage(HXThreadMessage* pMsg, void* pWindowHandle=NULL);
  128.     virtual HX_RESULT GetMessage( HXThreadMessage* pMsg,
  129.                                   UINT32 ulMsgFilterMin = 0, //Not used for now.
  130.                                   UINT32 ulMsgFilterMax = 0  //Not used for now.
  131.                                   );
  132.     virtual HX_RESULT PeekMessageMatching( HXThreadMessage* pMsg,
  133.                                            HXThreadMessage* pMatch,
  134.                                            BOOL             bRemoveMessage = 1
  135.                                            );
  136.     virtual HX_RESULT PeekMessage( HXThreadMessage* pMsg,
  137.                                    UINT32 ulMsgFilterMin = 0, //Not used for now.
  138.                                    UINT32 ulMsgFilterMax = 0, //Not used for now.
  139.                                    BOOL   bRemoveMessage = 1
  140.                                    );
  141.     virtual HX_RESULT DispatchMessage(HXThreadMessage* pMsg);
  142. protected:
  143.     typedef struct _execStruct
  144.     {
  145.         TThreadFunction  pfExecProc; //point to thread proc
  146.         void*            pExecArg;
  147.         HXGlobalManager* pGlobalManager;
  148.     } st_execStruct;
  149.     
  150.     static TInt _ThreadWrapper(TAny* execStruct);
  151. private:
  152.     RThread*       m_pThread;
  153.     CHXSimpleList  m_messageQue;      //Our Message Que.
  154.     
  155.     //Used to make GetMessage blocking and to protect access to the que.
  156.     RSemaphore*    m_pSemMessageCount;  //our message counting semaphore
  157.     HXMutex*       m_pmtxQue;
  158.     //Request status used to join the thread.
  159.     TRequestStatus m_reqStat;
  160.     //Prevent unintentional ctors
  161.     HXSymbianThread( const HXSymbianThread& ); //copy ctor
  162.     HXSymbianThread& operator=(const HXSymbianThread&); //assignment operator.
  163. };
  164. class HXSymbianAsyncTimerImp;
  165. class HXSymbianAsyncTimer 
  166. {
  167. public:
  168.     // These two methods are the main interface into this class. It 
  169.     // make it work just like the windows ::SetTimer and ::KillTimer
  170.     // functions.
  171.     static UINT32 SetTimer(ULONG32 ulTimeOut, HXThread* pReceivingThread );
  172.     static UINT32 SetTimer(ULONG32 ulTimeOut, TIMERPROC pfExecFunc );
  173.     static BOOL   KillTimer(UINT32 ulTimerID );
  174. private:
  175.     //Don't allow default/copy ctors or assignment oper. 
  176.     // You can't dup this class.
  177.     HXSymbianAsyncTimer();
  178.     HXSymbianAsyncTimer( const HXSymbianAsyncTimer& it );
  179.     HXSymbianAsyncTimer& operator=( const HXSymbianAsyncTimer& it );
  180.     static HXSymbianAsyncTimerImp* CreateTimer();
  181.     static HXMutex* GetMapLock();
  182.     static CHXMapLongToObj& GetMapTimers();
  183. };
  184. #endif //_SYMBIANTHREADSH