64 lines
1.7 KiB
C++
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_
|