Index: xfa/include/fwl/core/fwl_thread.h |
diff --git a/xfa/include/fwl/core/fwl_thread.h b/xfa/include/fwl/core/fwl_thread.h |
index 3bc5c3c289cb01c6dedf9a3afeedd9065a76094f..ed1fd9fc433e1f3396dca94452a0b49859d97276 100644 |
--- a/xfa/include/fwl/core/fwl_thread.h |
+++ b/xfa/include/fwl/core/fwl_thread.h |
@@ -4,47 +4,48 @@ |
// Original code copyright 2014 Foxit Software Inc. http://www.foxitsoftware.com |
-#ifndef _FWL_THREAD_H |
-#define _FWL_THREAD_H |
+#ifndef FWL_THREAD_H_ |
+#define FWL_THREAD_H_ |
+ |
+// The FWL thread/app code contains three parallel inheritance hierarchies, |
+// which reference each other via pointers as follows: |
+// |
+// m_pImpl |
+// (nonesuch) IFWL_Thread ----------> CFWL_ThreadImp |
+// | <---------- | |
+// A m_pIface A |
+// | | |
+// (nonesuch) IFWL_NoteThread CFWL_NoteThreadImp |
+// | | |
+// A A |
+// m_pIface | | |
+// CFWL_App --------------> IFWL_App CFWL_AppImp |
+// |
+ |
+class CFWL_ThreadImp; |
class IFWL_NoteDriver; |
-class IFWL_Thread; |
-class IFWL_NoteThread; |
+ |
typedef struct _FWL_HTHREAD { void* pData; } * FWL_HTHREAD; |
+ |
class IFWL_Thread { |
public: |
- static IFWL_Thread* Create(); |
+ // These call into polymorphic methods in the impl; no need to override. |
+ void Release(); |
+ FWL_ERR Run(FWL_HTHREAD hThread); |
+ |
+ CFWL_ThreadImp* GetImpl() const { return m_pImpl; } |
+ void SetImpl(CFWL_ThreadImp* pImpl) { m_pImpl = pImpl; } |
protected: |
virtual ~IFWL_Thread() {} |
- public: |
- virtual void Release() = 0; |
- virtual FWL_ERR Run(FWL_HTHREAD hThread) = 0; |
+ private: |
+ CFWL_ThreadImp* m_pImpl; |
}; |
-FWL_HTHREAD FWL_StartThread(IFWL_Thread* pThread, FX_BOOL bSuspended = FALSE); |
-FWL_ERR FWL_ResumeThread(FWL_HTHREAD hThread); |
-FWL_ERR FWL_SuspendThread(FWL_HTHREAD hThread); |
-FWL_ERR FWL_KillThread(FWL_HTHREAD hThread, int32_t iExitCode); |
-FWL_ERR FWL_StopThread(FWL_HTHREAD hThread, int32_t iExitCode); |
-FWL_ERR FWL_Sleep(FX_DWORD dwMilliseconds); |
+ |
class IFWL_NoteThread : public IFWL_Thread { |
public: |
- static IFWL_NoteThread* Create(); |
- virtual FWL_ERR Run(FWL_HTHREAD hThread) = 0; |
- virtual IFWL_NoteDriver* GetNoteDriver() = 0; |
+ IFWL_NoteDriver* GetNoteDriver(); |
}; |
-typedef struct _FWL_HMUTEX { void* pData; } * FWL_HMUTEX; |
-FWL_HMUTEX FWL_CreateMutex(); |
-FWL_ERR FWL_DestroyMutex(FWL_HMUTEX hMutex); |
-FWL_ERR FWL_LockMutex(FWL_HMUTEX hMutex); |
-FWL_ERR FWL_TryLockMutex(FWL_HMUTEX hMutex); |
-FWL_ERR FWL_UnlockMutex(FWL_HMUTEX hMutex); |
-FWL_ERR FWL_IsLockedMutex(FWL_HMUTEX hMutex, FX_BOOL& bLocked); |
-typedef struct _FWL_HSEMAPHORE { void* pData; } * FWL_HSEMAPHORE; |
-FWL_HSEMAPHORE FWL_CreateSemaphore(); |
-FWL_ERR FWL_DestroySemaphore(FWL_HSEMAPHORE hSemaphore); |
-FWL_ERR FWL_WaitSemaphore(FWL_HSEMAPHORE hSemaphore); |
-FWL_ERR FWL_PostSemaphore(FWL_HSEMAPHORE hSemaphore, int32_t down = 1); |
-FWL_ERR FWL_GetSemaphoreValue(FWL_HSEMAPHORE hSemaphore, int32_t& value); |
-FWL_ERR FWL_ResetSemaphore(FWL_HSEMAPHORE hSemaphore, int32_t init); |
-#endif |
+ |
+#endif // FWL_THREAD_H_ |