DragonNest/Extern/PTSDK/ThreadMaster.h
2024-12-19 09:48:26 +08:00

73 lines
No EOL
1.5 KiB
C++

#pragma once
#include "sdkconfig.h"
#include "stdafx.h"
#ifndef PTSDK_STUFF
#define PTSDK_STUFF
#endif
class PTSDK_STUFF CThreadMaster
{
public:
CThreadMaster(void);
~CThreadMaster(void);
typedef void (*WorkFuncType)(void * param);
enum CycleTimeEnum{ AlwaysWait = -1, AlwaysWork = 0};
void Start();
void Stop();
void WorkNow();
void Set(WorkFuncType function, void * parameter, int cycleTime);
void SetWorkFunction( WorkFuncType function );
void SetWorkParameter( void * parameter);
void SetCycleTime( int cycleTime );
unsigned long GetThreadId();
static unsigned __stdcall WorkThread( void * lpParameter );
protected:
enum ThreadCmd{ nothing = 0, stop};
ThreadCmd m_ThreadCmd;
HANDLE m_hThread;
HANDLE m_hEvent;
unsigned int m_ThreadId;
int m_CycleTime;
void * m_lpParameter;
WorkFuncType m_WorkFunction;
};
class PTSDK_STUFF CMutiThreadMaster
{
public:
CMutiThreadMaster(int count = 1);
~CMutiThreadMaster();
void Set(CThreadMaster::WorkFuncType function, void * parameter, int cycleTime);
void SetWorkFunction( CThreadMaster::WorkFuncType function );
void SetWorkParameter( void * parameter);
void SetWorkParameter( void ** parameters, int count);
void SetCycleTime( int cycleTime );
void Start(int count = 1);
void Stop();
void WorkNow(int jobCount=1);
void CreateThread(int count);
protected:
int m_ThreadCount;
CThreadMaster ** m_pThreads;
void Clear();
int m_CycleTime;
void * m_lpParameter;
CThreadMaster::WorkFuncType m_WorkFunction;
private:
int m_ThreadIndex;
};