94 lines
1.9 KiB
C
94 lines
1.9 KiB
C
|
|
#ifndef _ASYNC_WORKER_H_
|
|||
|
|
#define _ASYNC_WORKER_H_
|
|||
|
|
|
|||
|
|
/*
|
|||
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><EFBFBD>̣߳<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڷ<EFBFBD><EFBFBD><EFBFBD>Ϸ<EFBFBD><EFBFBD><EFBFBD>߳<EFBFBD>ִ<EFBFBD>еIJ<EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ÿ<EFBFBD><EFBFBD>web<EFBFBD>ӿڡ<EFBFBD>
|
|||
|
|
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>µĹ<EFBFBD><EFBFBD>ܣ<EFBFBD>ֻ<EFBFBD><EFBFBD>Ҫ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>̵߳<EFBFBD>ִ<EFBFBD>к<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Լ<EFBFBD>ִ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɺ<EFBFBD><EFBFBD>Ļص<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
*/
|
|||
|
|
|
|||
|
|
using namespace thread;
|
|||
|
|
using namespace container;
|
|||
|
|
|
|||
|
|
class AsyncWorker: public thread::BaseThread
|
|||
|
|
{
|
|||
|
|
public:
|
|||
|
|
typedef BufferAllocator AsyncWorkerAlloc;
|
|||
|
|
|
|||
|
|
typedef BaseThread Inherited;
|
|||
|
|
typedef void (*WordFunc)(void* cb);
|
|||
|
|
typedef void (*WorkerCallBack)(void* cb);
|
|||
|
|
typedef void (*FreeFunc)(void* cb);
|
|||
|
|
|
|||
|
|
struct LuaParams
|
|||
|
|
{
|
|||
|
|
ScriptValueList req_; // <20><><EFBFBD><EFBFBD><EFBFBD>IJ<EFBFBD><C4B2><EFBFBD><EFBFBD>б<EFBFBD>
|
|||
|
|
ScriptValueList result_; // ִ<><D6B4><EFBFBD><EFBFBD><EFBFBD>ص<F3B7B5BB>ֵ
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
struct CBData
|
|||
|
|
{
|
|||
|
|
unsigned int guid_; // <20><><EFBFBD>кţ<D0BA>ÿ<EFBFBD><C3BF>ִ<EFBFBD>еĺ<D0B5><C4BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB>Ψһ<CEA8><D2BB>id<69><64><EFBFBD><EFBFBD><EFBFBD>ڻص<DABB>
|
|||
|
|
WordFunc work_func_; // <20>ڱ<EFBFBD><DAB1>߳<EFBFBD><DFB3><EFBFBD>ִ<EFBFBD>еĹ<D0B5><C4B9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>web
|
|||
|
|
WordFunc after_func_; // <20><><EFBFBD><EFBFBD>Ϸ<EFBFBD><CFB7><EFBFBD>߳<EFBFBD>Ҫִ<D2AA>еĺ<D0B5><C4BA><EFBFBD>ָ<EFBFBD><D6B8>,<2C><><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
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);
|
|||
|
|
|
|||
|
|
void LoadScript(const char* lua_file);
|
|||
|
|
|
|||
|
|
virtual ~AsyncWorker();
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>߳<EFBFBD>ִ<EFBFBD>еIJ<D0B5><C4B2><EFBFBD>
|
|||
|
|
void AppendWork(CBData* cb);
|
|||
|
|
|
|||
|
|
public:
|
|||
|
|
AsyncWorkerAlloc& GetAlloc()
|
|||
|
|
{
|
|||
|
|
return alloc_;
|
|||
|
|
}
|
|||
|
|
void SetWorkCallBack(WorkerCallBack wcb)
|
|||
|
|
{
|
|||
|
|
wcb_ = wcb;
|
|||
|
|
}
|
|||
|
|
void Reload()
|
|||
|
|
{
|
|||
|
|
reload_ = true;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// <20><><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4>lua<75><61><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
unsigned int SendLuaMessage(ScriptValueList& req, WordFunc func);
|
|||
|
|
protected:
|
|||
|
|
void OnRoutine();
|
|||
|
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><DFBC><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
int Run();
|
|||
|
|
void OnStart();
|
|||
|
|
void OnStop();
|
|||
|
|
private:
|
|||
|
|
static void FreeLuaParams(void* callback);
|
|||
|
|
static void ExecuteLua(void* cb);
|
|||
|
|
private:
|
|||
|
|
QueueList<CBData*> cb_list_;
|
|||
|
|
Mutex cb_list_lock_;
|
|||
|
|
|
|||
|
|
AsyncWorkerAlloc alloc_;
|
|||
|
|
unsigned int id_;
|
|||
|
|
WorkerCallBack wcb_;
|
|||
|
|
BaseScript script_; // <20><><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4>lua<75>Ĵ<EFBFBD><C4B4><EFBFBD>
|
|||
|
|
bool reload_; // ֪ͨ<CDA8><D6AA><EFBFBD>¼<EFBFBD><C2BC>ؽű<D8BD>
|
|||
|
|
char lua_file_[128]; //<2F>ļ<EFBFBD><C4BC><EFBFBD>
|
|||
|
|
};
|
|||
|
|
|
|||
|
|
#endif
|
|||
|
|
|
|||
|
|
|
|||
|
|
|