#pragma once #include "SThreadControl.h" class CSWorkThreadData { public: CSWorkThreadData(PVOID pPtr) { pCallerPtr = pPtr; dwDelayTime = 0; dwHoldTime = 1000; nSignalType = -1; nSignalIndex = -1; nSignalValue = 1; } virtual ~CSWorkThreadData() { pCallerPtr = NULL; } PVOID pCallerPtr; DWORD dwDelayTime; DWORD dwHoldTime; int nSignalType; int nSignalIndex; int nSignalValue; }; interface ISWorkThread2Parent { virtual void ISWT2P_SendSignalData(int nSignalType, int nSignalIndex, int nValue, DWORD dwDelayTime, DWORD dwHoldTime) = 0; }; class AFX_EXT_CLASS CSWorkThread : public CSThreadControl { public: CSWorkThread(ISWorkThread2Parent *pSWSTP, int nThreadCount=5); virtual ~CSWorkThread(void); BOOL AddThreadData(int nType, int nIndex, int nValue, DWORD dwDelay, DWORD dwHold); protected: virtual void WorkThreadProcess(PVOID pParameter); protected: void RunWorkThread(PVOID pParameter); BOOL CreateWorkThread(PVOID pParameter); void CloseWorkThread(); static VOID CALLBACK WorkCallback(PTP_CALLBACK_INSTANCE pInstance, PVOID pParameter, PTP_WORK pWork); protected: PTP_WORK m_pWork; PTP_WORK_CALLBACK m_pWorkCallback; ISWorkThread2Parent* m_pSWT2P; };