diff options
author | chai <chaifix@163.com> | 2018-08-14 16:14:32 +0800 |
---|---|---|
committer | chai <chaifix@163.com> | 2018-08-14 16:14:32 +0800 |
commit | 57efa331c7ddc247c9b14dc19d4d98afbeb4e3b4 (patch) | |
tree | 1ebba4cd5b97a771d2f35e708ceda7193b904516 /src/lua/thread | |
parent | 0d26ed3a45f53fdbd7731b5f2a4d88edef201e44 (diff) |
*update
Diffstat (limited to 'src/lua/thread')
-rw-r--r-- | src/lua/thread/Thread.h | 14 | ||||
-rw-r--r-- | src/lua/thread/luaopen_Thread.cpp | 10 | ||||
-rw-r--r-- | src/lua/thread/luaopen_thread.cpp | 10 |
3 files changed, 22 insertions, 12 deletions
diff --git a/src/lua/thread/Thread.h b/src/lua/thread/Thread.h index 63f7524..6969fd8 100644 --- a/src/lua/thread/Thread.h +++ b/src/lua/thread/Thread.h @@ -12,17 +12,18 @@ namespace thread { public: typedef jin::thread::Thread::Variant Variant; + typedef jin::thread::Thread::ThreadRunner ThreadRunner; - Thread(std::string _name, std::string _code, jin::thread::Thread::ThreadRunner runner) + Thread(std::string _name, std::string _code, ThreadRunner runner) : name(_name) , code(_code) { thread = new jin::thread::Thread(_name, runner); } - bool start() + bool start(void* p) { - return thread->start(); + return thread->start(p); } void wait() @@ -75,7 +76,10 @@ namespace thread thread->unlock(); } - static void threadRunner(jin::thread::Thread* t); + static void threadRunner(Thread* t); + + const std::string name; + const std::string code; private: ~Thread() @@ -85,8 +89,6 @@ namespace thread jin::thread::Thread* thread; - const std::string name; - const std::string code; }; } // thread diff --git a/src/lua/thread/luaopen_Thread.cpp b/src/lua/thread/luaopen_Thread.cpp index 70a30ee..b6fb33b 100644 --- a/src/lua/thread/luaopen_Thread.cpp +++ b/src/lua/thread/luaopen_Thread.cpp @@ -21,7 +21,7 @@ namespace lua return nullptr; } - void Thread::threadRunner(jin::thread::Thread* t) + static int threadRunner(void* t) { Thread* thread = (Thread*)t; lua_State* L = lua_open(); @@ -29,10 +29,12 @@ namespace lua luaopen_jin(L); luax_getglobal(L, MODULE_NAME); Proxy* proxy = (Proxy*)luax_newinstance(L, JIN_THREAD_THREAD, sizeof(Proxy)); + thread->retain(); proxy->bind(thread, JIN_THREAD_THREAD); luax_setfield(L, -2, "_curThread"); luax_dostring(L, thread->code.c_str()); luax_close(L); + return 0; } static int l_thread_gc(lua_State* L) @@ -45,7 +47,7 @@ namespace lua static int l_start(lua_State* L) { Thread* t = checkThread(L); - bool result = t->start(); + bool result = t->start(t); luax_pushboolean(L, result); return 1; } @@ -125,6 +127,7 @@ namespace lua case thread::Thread::Variant::POINTER: Proxy* p = (Proxy*)v.pointer; Proxy* proxy = (Proxy*)luax_newinstance(L, p->type, sizeof(Proxy)); + p->object->retain(); proxy->bind(p->object, p->type); break; @@ -158,6 +161,7 @@ namespace lua case thread::Thread::Variant::POINTER: Proxy* p = (Proxy*)v.pointer; Proxy* proxy = (Proxy*)luax_newinstance(L, p->type, sizeof(Proxy)); + p->object->retain(); proxy->bind(p->object, p->type); break; @@ -216,7 +220,7 @@ namespace lua const char* name = luax_checkstring(L, 1); const char* code = luax_checkstring(L, 2); Proxy* proxy = (Proxy*)luax_newinstance(L, JIN_THREAD_THREAD, sizeof(Proxy)); - Thread* thread = new Thread(name, code, Thread::threadRunner); + Thread* thread = new Thread(name, code, threadRunner); proxy->bind(thread, JIN_THREAD_THREAD); return 1; } diff --git a/src/lua/thread/luaopen_thread.cpp b/src/lua/thread/luaopen_thread.cpp index 70a30ee..b6fb33b 100644 --- a/src/lua/thread/luaopen_thread.cpp +++ b/src/lua/thread/luaopen_thread.cpp @@ -21,7 +21,7 @@ namespace lua return nullptr; } - void Thread::threadRunner(jin::thread::Thread* t) + static int threadRunner(void* t) { Thread* thread = (Thread*)t; lua_State* L = lua_open(); @@ -29,10 +29,12 @@ namespace lua luaopen_jin(L); luax_getglobal(L, MODULE_NAME); Proxy* proxy = (Proxy*)luax_newinstance(L, JIN_THREAD_THREAD, sizeof(Proxy)); + thread->retain(); proxy->bind(thread, JIN_THREAD_THREAD); luax_setfield(L, -2, "_curThread"); luax_dostring(L, thread->code.c_str()); luax_close(L); + return 0; } static int l_thread_gc(lua_State* L) @@ -45,7 +47,7 @@ namespace lua static int l_start(lua_State* L) { Thread* t = checkThread(L); - bool result = t->start(); + bool result = t->start(t); luax_pushboolean(L, result); return 1; } @@ -125,6 +127,7 @@ namespace lua case thread::Thread::Variant::POINTER: Proxy* p = (Proxy*)v.pointer; Proxy* proxy = (Proxy*)luax_newinstance(L, p->type, sizeof(Proxy)); + p->object->retain(); proxy->bind(p->object, p->type); break; @@ -158,6 +161,7 @@ namespace lua case thread::Thread::Variant::POINTER: Proxy* p = (Proxy*)v.pointer; Proxy* proxy = (Proxy*)luax_newinstance(L, p->type, sizeof(Proxy)); + p->object->retain(); proxy->bind(p->object, p->type); break; @@ -216,7 +220,7 @@ namespace lua const char* name = luax_checkstring(L, 1); const char* code = luax_checkstring(L, 2); Proxy* proxy = (Proxy*)luax_newinstance(L, JIN_THREAD_THREAD, sizeof(Proxy)); - Thread* thread = new Thread(name, code, Thread::threadRunner); + Thread* thread = new Thread(name, code, threadRunner); proxy->bind(thread, JIN_THREAD_THREAD); return 1; } |