| 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..a2592a9a4b5485b832563299224b5e17e4c0375e 100644
|
| --- a/xfa/include/fwl/core/fwl_thread.h
|
| +++ b/xfa/include/fwl/core/fwl_thread.h
|
| @@ -4,47 +4,49 @@
|
|
|
| // 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_
|
|
|