symbianthreads.h
上传用户:dangjiwu
上传日期:2013-07-19
资源大小:42019k
文件大小:8k
源码类别:

Symbian

开发平台:

Visual C++

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