使用线程本地存储(Thread Local Store)存储 lua_State。

我需要在 IOCP 中使用 Lua,并使用 Thread Local Storage 存储 lua_State *。我应该在线程被销毁之前使用 lua_close() 销毁 lua_State,但是这个工作线程是由 IOCP 创建的。

问题是什么时候调用 lua_close 是正确的?

static DWORD WINAPI work_thread_proc(void* parameter){
    lua_State * L = TlsGetValue(tls_lua_key);
    if(NULL = L){
          L=luaL_newstate();
          // 对 L 进行一些初始化...

          TlsSetValue(tls_lua_key,L);
    }

}

//..... 其他地方调用
QueueUserWorkItem(&work_thread_proc, req, WT_EXECUTELONGFUNCTION);
点赞
用户4401051
用户4401051

你可以像这样使用它。

__declspec(thread) lua_State *tls_LuaState = NULL;
// 在线程退出时关闭 Lua 状态。
void NTAPI TLS_CloseLuaState(PVOID module, DWORD reason, PVOID reserved)
{
    if(NULL != ){
        lua_close(tls_LuaState);
    }
}

#pragma section(".CRT$XLB",long,read)
    __declspec(allocate(".CRT$XLB"))
        PIMAGE_TLS_CALLBACK p_thread_callback_base = TLS_CloseLuaState;
2015-11-23 13:44:43