windows-nt/Source/XPSP1/NT/shell/cpls/appwzdui/worker.h
2020-09-26 16:20:57 +08:00

64 lines
1.7 KiB
C++

// worker.h : Declaration of the CWorkerThread
#ifndef __WORKER_H_
#define __WORKER_H_
#include "iface.h" // for IWorkerEvent
// CWorkerThread
class CWorkerThread : public IARPWorker
{
public:
CWorkerThread();
virtual ~CWorkerThread();
// *** IUnknown ***
virtual STDMETHODIMP_(ULONG) AddRef (void);
virtual STDMETHODIMP_(ULONG) Release (void);
virtual STDMETHODIMP QueryInterface (REFIID riid, LPVOID * ppvObj);
// *** IARPWorker ***
virtual STDMETHODIMP KillWT (void);
STDMETHOD(StartWT) (int iPriority);
STDMETHOD(SetListenerWT) (IWorkerEvent * pwe);
BOOL IsKilled() { return _fKillWorker; };
BOOL PostWorkerMessage(UINT uMsg, WPARAM wParam, LPARAM lParam);
virtual DWORD _ThreadStartProc();
protected:
DWORD _dwThreadId;
private:
void _LockWorker(void);
void _UnlockWorker(void);
LONG _cRef;
CRITICAL_SECTION _csWorker;
DEBUG_CODE( LONG _cRefLockWorker; )
LONG _cItems;
IWorkerEvent * _pwe;
BITBOOL _fKillWorker: 1;
HANDLE _hthreadWorker;
HWND _hwndWorker;
LRESULT _WorkerWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
static DWORD CALLBACK _ThreadStartProcWrapper(LPVOID lpParam);
static LRESULT CALLBACK _WorkerWndProcWrapper(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
};
// Window messages from worker thread that cause actions on the main thread
#define WORKERWIN_FIRE_ROW_READY (WM_USER + 0x0101) // wParam is row #
#define WORKERWIN_FIRE_FINISHED (WM_USER + 0X0102)
#define WORKERWIN_FIRE_DATASETCHANGED (WM_USER + 0X0103)
#endif //__WORKER_H_