93 lines
2.3 KiB
C++
93 lines
2.3 KiB
C++
#ifndef _ASYNC_WORKER_H_
|
||
#define _ASYNC_WORKER_H_
|
||
|
||
/*
|
||
* 单独运行的线程,用于非游戏主线程执行的操作
|
||
* 比如访问每个web接口。
|
||
* 增加新的功能,只需要定义线程的执行函数,以及执行完成后的回调函数
|
||
*/
|
||
#include "_osdef.h"
|
||
#include "Thread.h"
|
||
|
||
using namespace wylib::time::tick64;
|
||
using namespace wylib::container;
|
||
using namespace wylib::sync::lock;
|
||
using namespace wylib::thread;
|
||
|
||
class AsyncWorker: public wylib::thread::CBaseThread
|
||
{
|
||
public:
|
||
typedef CBufferAllocator AsyncWorkerAlloc;
|
||
|
||
typedef wylib::thread::CBaseThread Inherited;
|
||
typedef void (*WordFunc)(void* cb);
|
||
typedef void (*WorkerCallBack)(void* cb);
|
||
typedef void (*FreeFunc)(void* cb);
|
||
|
||
struct LuaParams
|
||
{
|
||
CScriptValueList req_; // 请求的参数列表
|
||
CScriptValueList result_; // 执行完后返回的值
|
||
};
|
||
|
||
struct CBData
|
||
{
|
||
unsigned int guid_; // 序列号,每个执行的函数都会分配一个唯一的id,用于回调
|
||
WordFunc work_func_; // 在本线程里执行的工作函数,比如访问web
|
||
WordFunc after_func_; // 在游戏主线程要执行的函数指针,即回调函数
|
||
FreeFunc free_func_;
|
||
void* params_;
|
||
AsyncWorker* worker_;
|
||
CBData(AsyncWorker* worker, unsigned int guid)
|
||
: guid_(guid)
|
||
, work_func_(NULL), after_func_(NULL), free_func_(NULL)
|
||
, params_(NULL), worker_(worker)
|
||
{ }
|
||
};
|
||
|
||
public:
|
||
|
||
AsyncWorker(const char* lua_file = NULL);
|
||
virtual ~AsyncWorker();
|
||
|
||
public:
|
||
|
||
void LoadScript(const char* lua_file);
|
||
void Reload() { m_isReload = true; }
|
||
|
||
AsyncWorkerAlloc& GetAlloc() { return m_Alloc; }
|
||
void SetWorkCallBack(WorkerCallBack wcb) { m_WorkCallBack = wcb; }
|
||
|
||
// 发送执行lua的请求
|
||
unsigned int SendLuaMessage(CScriptValueList& req, WordFunc func);
|
||
|
||
protected:
|
||
|
||
void OnRountine();
|
||
//单次逻辑处理
|
||
int Run();
|
||
void OnStart();
|
||
void OnStop();
|
||
// 新增一个线程执行的操作
|
||
void AppendWork(CBData* cb);
|
||
|
||
private:
|
||
static void FreeLuaParams(void* callback);
|
||
static void ExecuteLua(void* cb);
|
||
|
||
private:
|
||
CQueueList<CBData*> m_CallBackDataList;
|
||
CCSLock m_Lock;
|
||
AsyncWorkerAlloc m_Alloc;
|
||
unsigned int m_Id;
|
||
WorkerCallBack m_WorkCallBack;
|
||
CLogicScript m_Script; // 用于执行lua的代码
|
||
bool m_isReload; // 通知重新加载脚本
|
||
char m_sLuaFilePath[128]; //文件名
|
||
};
|
||
|
||
#endif
|
||
|
||
|
||
|