diff options
| author | ruki <[email protected]> | 2025-04-18 22:42:48 +0800 |
|---|---|---|
| committer | ruki <[email protected]> | 2025-08-28 11:35:53 +0800 |
| commit | ad77d170e407fc7d346df32a88683aae050bf36b (patch) | |
| tree | e1ae2f06dc31a84ae42b4dd6086cb570ef88b95b /core/src | |
| parent | 6eccd1efa540d634e35eb29cf923025e0667aa0c (diff) | |
run thread
Diffstat (limited to 'core/src')
| -rw-r--r-- | core/src/xmake/thread/prefix.h | 3 | ||||
| -rw-r--r-- | core/src/xmake/thread/thread_exit.c | 3 | ||||
| -rw-r--r-- | core/src/xmake/thread/thread_init.c | 40 |
3 files changed, 23 insertions, 23 deletions
diff --git a/core/src/xmake/thread/prefix.h b/core/src/xmake/thread/prefix.h index 6ce15073b..061dca962 100644 --- a/core/src/xmake/thread/prefix.h +++ b/core/src/xmake/thread/prefix.h @@ -34,8 +34,7 @@ typedef struct __xm_thread_t { tb_thread_ref_t handle; - tb_string_t callback; - tb_string_t argv; + tb_string_t callinfo; }xm_thread_t; diff --git a/core/src/xmake/thread/thread_exit.c b/core/src/xmake/thread/thread_exit.c index 023d6afa7..881addbd2 100644 --- a/core/src/xmake/thread/thread_exit.c +++ b/core/src/xmake/thread/thread_exit.c @@ -49,8 +49,7 @@ tb_int_t xm_thread_exit(lua_State* lua) // exit thread if (thread) { - tb_string_exit(&thread->callback); - tb_string_exit(&thread->argv); + tb_string_exit(&thread->callinfo); if (thread->handle) { tb_thread_exit(thread->handle); diff --git a/core/src/xmake/thread/thread_init.c b/core/src/xmake/thread/thread_init.c index c33e13702..8ed5cf90a 100644 --- a/core/src/xmake/thread/thread_init.c +++ b/core/src/xmake/thread/thread_init.c @@ -49,10 +49,21 @@ static tb_int_t xm_thread_func(tb_cpointer_t priv) xm_engine_ref_t engine = xm_engine_init(XM_THREAD_ENGINE_NAME, tb_null); if (engine) { - tb_char_t* taskargv[] = {"lua", (tb_char_t*)tb_string_cstr(&thread->callback), tb_null}; + // pass callinfo + lua_State* lua = xm_engine_lua(engine); + tb_assert(lua); + tb_char_t const* callinfo_data = tb_string_cstr(&thread->callinfo); + tb_size_t callinfo_size = tb_string_size(&thread->callinfo); + if (callinfo_data && callinfo_size) + { + lua_pushlstring(lua, callinfo_data, callinfo_size); + lua_setglobal(lua, "_THREAD_CALLINFO"); + } + + // start engine tb_char_t* argv[] = {XM_THREAD_ENGINE_NAME, tb_null}; - xm_engine_main(engine, 1, argv, taskargv); + xm_engine_main(engine, 1, argv, tb_null); xm_engine_exit(engine); } tb_trace_i("thread: end"); @@ -74,28 +85,20 @@ tb_int_t xm_thread_init(lua_State* lua) // get thread name tb_char_t const* name = luaL_checkstring(lua, 1); - // get callback - size_t callback_size = 0; - tb_char_t const* callback_data = luaL_checklstring(lua, 2, &callback_size); - tb_assert_and_check_break(callback_data && callback_size); - - // get argv - size_t argv_size = 0; - tb_char_t const* argv_data = luaL_checklstring(lua, 3, &argv_size); - tb_assert_and_check_break(argv_data && argv_size); + // get callinfo + size_t callinfo_size = 0; + tb_char_t const* callinfo_data = luaL_checklstring(lua, 2, &callinfo_size); + tb_assert_and_check_break(callinfo_data && callinfo_size); // get stack size - tb_size_t stacksize = (tb_size_t)luaL_checkinteger(lua, 4); + tb_size_t stacksize = (tb_size_t)luaL_checkinteger(lua, 3); // init thread thread = tb_malloc0_type(xm_thread_t); tb_assert_and_check_break(thread); - tb_string_init(&thread->callback); - tb_string_cstrncpy(&thread->callback, callback_data, callback_size); - - tb_string_init(&thread->argv); - tb_string_cstrncpy(&thread->argv, argv_data, argv_size); + tb_string_init(&thread->callinfo); + tb_string_cstrncpy(&thread->callinfo, callinfo_data, callinfo_size); // create and start thread thread->handle = tb_thread_init(name, xm_thread_func, thread, stacksize); @@ -110,8 +113,7 @@ tb_int_t xm_thread_init(lua_State* lua) { if (thread) { - tb_string_exit(&thread->callback); - tb_string_exit(&thread->argv); + tb_string_exit(&thread->callinfo); if (thread->handle) { tb_thread_exit(thread->handle); |
