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

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 _HXTHREAD_H_
  36. #define _HXTHREAD_H_
  37. #include "hxtypes.h"
  38. #include "hxresult.h"
  39. #define ALLFS 0xFFFFFFFF
  40. #if !defined( _WIN32 ) && !defined( _WINDOWS )
  41. typedef void (*TIMERPROC)( void* , UINT32 , UINT32, ULONG32 );
  42. #endif
  43. #if defined(HELIX_FEATURE_NETWORK_USE_SELECT)
  44. class conn;
  45. #endif //defined(HELIX_FEATURE_NETWORK_USE_SELECT)
  46. struct HXThreadMessage
  47. {
  48.     HXThreadMessage() 
  49. {
  50.     m_ulMessage     = 0; 
  51.     m_pParam1     = NULL; 
  52.     m_pParam2     = NULL; 
  53.     m_pPlatformSpecificData = NULL;
  54. };
  55.     HXThreadMessage(UINT32 ulMessage, void* pParam1, void* pParam2, 
  56.     void* pPlatformSpecificData = NULL)
  57. {
  58.     m_ulMessage     = ulMessage; 
  59.     m_pParam1     = pParam1; 
  60.     m_pParam2     = pParam2;
  61.     m_pPlatformSpecificData = pPlatformSpecificData;
  62. };
  63.   HXThreadMessage(HXThreadMessage* pMsg)
  64.     : m_ulMessage(0),
  65.       m_pParam1(NULL),
  66.       m_pParam2(NULL),
  67.       m_pPlatformSpecificData(NULL)
  68. {
  69.     if( pMsg )
  70.     {
  71.       m_ulMessage     = pMsg->m_ulMessage; 
  72.       m_pParam1     = pMsg->m_pParam1; 
  73.       m_pParam2     = pMsg->m_pParam2;
  74.       m_pPlatformSpecificData = pMsg->m_pPlatformSpecificData;
  75.     }
  76. };
  77.     UINT32  m_ulMessage;
  78.     void*   m_pParam1;
  79.     void*   m_pParam2;
  80.     void*   m_pPlatformSpecificData;
  81. };
  82. enum
  83. {
  84.     HX_CREATE_SUSPENDED = 0x01
  85. };
  86. class HXThread
  87. {
  88. public:
  89.     static  HX_RESULT MakeThread(HXThread*& pThread);
  90.     static  HX_RESULT MakeStubThread(HXThread*& pThread);
  91.     virtual ~HXThread (void);
  92.     virtual HX_RESULT CreateThread
  93. (void* (pExecAddr(void*)), 
  94.  void* pArg,
  95.  ULONG32 ulCreationFlags = 0) = 0;
  96.     virtual HX_RESULT Suspend (void) = 0;
  97.     
  98.     virtual HX_RESULT Resume (void) = 0;
  99.     virtual HX_RESULT SetPriority (UINT32 ulPriority) = 0;
  100.     virtual HX_RESULT GetPriority (UINT32& ulPriority) = 0;
  101.     virtual HX_RESULT YieldTimeSlice (void) = 0;
  102.     virtual HX_RESULT Exit (UINT32 ulExitCode) = 0; 
  103.     virtual HX_RESULT GetThreadId (UINT32& ulThreadId) = 0;
  104.     //Returns *THE CALLING THREADS ID*, not the created thread's id.
  105.     virtual ULONG32     GetCurrentThreadID() = 0;
  106.     virtual HX_RESULT PostMessage(HXThreadMessage* pMsg, void* pWindowHandle = 0) = 0;
  107.     virtual HX_RESULT GetMessage(HXThreadMessage* pMsg, UINT32 ulMsgFilterMix = 0, UINT32 ulMsgFilterMax = 0) = 0;
  108.     virtual HX_RESULT DispatchMessage(HXThreadMessage* pMsg) = 0;
  109. #if defined(HELIX_FEATURE_NETWORK_USE_SELECT)
  110. public:
  111.     conn *  m_pConn; // connection to send loopback msg
  112.     BOOL    m_bUseReaderWriter; // set to true for network thread when local read/writer connected
  113.     virtual void SetNetworkMessageConnection(conn* pConn) {};
  114. #endif // HELIX_FEATURE_NETWORK_USE_SELECT
  115. };
  116. class HXMutex
  117. {
  118. public:
  119.     static  HX_RESULT MakeNamedMutex (HXMutex*& pMutex, char* pName);
  120.     static  HX_RESULT MakeMutex (HXMutex*& pMutex);
  121.     static  HX_RESULT MakeStubMutex (HXMutex*& pMutex);
  122.     virtual ~HXMutex (void) = 0;
  123.     virtual HX_RESULT Lock (void) = 0;
  124.     virtual HX_RESULT   Unlock (void) = 0;
  125.     virtual HX_RESULT   Trylock (void) = 0;
  126. };
  127. class HXEvent
  128. {
  129. public:
  130.     static  HX_RESULT MakeEvent (HXEvent*& pEvent, const char* pEventName = NULL, BOOL bManualReset = TRUE);
  131.     static  HX_RESULT MakeStubEvent (HXEvent*& pEvent, const char* pEventName = NULL, BOOL bManualReset = TRUE);
  132.     virtual ~HXEvent (void) = 0;
  133.     virtual HX_RESULT SignalEvent (void) = 0;
  134.     virtual HX_RESULT ResetEvent (void) = 0;
  135.     virtual void* GetEventHandle (void) = 0;
  136.     virtual HX_RESULT Wait (UINT32 uTimeoutPeriod = ALLFS) = 0;
  137. };
  138. //providing async callbacks.
  139. class HXAsyncTimer
  140. {
  141. public:
  142.     // HXMSG_ASYNC_TIMER messages will be posted to
  143.     // pReceivingThread's message queue every ulTimeOut milliseconds.
  144.     // until KillTimer is called.
  145.     // NOTE: under _WIN32 pReceivingThread is IGNORED and the calling
  146.     // thread is the one to recieve the timer messages (WM_TIMER).
  147.     static UINT32 SetTimer(ULONG32 ulTimeOut, HXThread* pReceivingThread );
  148.     // pfExecFunc will be called every ulTimeOut milliseconds.
  149.     static UINT32 SetTimer(ULONG32 ulTimeOut, TIMERPROC pfExecFunc );
  150.     // ulTimeOut timer is killed/removed.
  151.     static BOOL   KillTimer(UINT32 ulTimerID );
  152. };
  153. #endif /*_HXTHREAD_H_*/