在Lua只支持协程,并不支持系统级的线程,于是便想自己实现一个。
用法如下:
local thread=Thread.create()
thread:start()
thread:run("return arg..' world !'","hello",function(returnData)
print(returnData)
thread:quit()
end)
接口定义如下:
- create()用于创建一个线程;
- start()启动线程;
- run(script,param,callback)用于运行并处理执行结果;
- quit()退出线程;
注意参数及返回值的传递只能使用字符串进行传递,如果需要传递lua表的话,则可以使用cjson进行编码后再进行传递。
实现代码如下:
Lua的封装使用了自己写的luaobj库。
#include "luaobj/LuaState.h"
#include <pthread.h>
#include <string>
#include <queue>
#include "basics/CAScheduler.h"
class LuaThread
{
public:
//运行的参数
struct RunParam {
uint32_t reqid;
std::string script;
std::string param;
};
//返回的参数
struct ReturnParam {
unsi