У меня есть приложение C ++ dll, которое вызывается из среды Lua, встроенной в исполняемый файл. Мне нужен "основной" поток dll для порождения потока, чтобы сделать свое дело, и позволить основному потоку умереть, чтобы продолжить выполнение сценария Lua, который запустил dll. Если я использую join (), основной поток не возвращается в Lua, если я не использую, основной поток завершает работу и убивает сына.
Это вообще возможно?
Спасибо за помощь этому noob:)
РЕДАКТИРОВАТЬ: Похоже, что detach () это то, что я ищу
void startThread() {
initCommunication();
}
extern "C" __declspec(dllexport) int luaopen_myDLL(lua_State *L){
// register Lua functions
static const luaL_Reg functs [] = {
{"registerOffsetMap", cpp_registerOffsetMap},
{"registerLuaFile", cpp_registerLuaFile},
...
{NULL,NULL}
};
luaL_register(L,"myDLL", functs);
LuaGlobal = L;
if (active) {
return 0;
}
// run installed modules
...
boost::thread thrd(startThread);
thrd.detach();
return 0;
}
Для вызова Lua-скрипта требуется myDLL и запускается функция luaopen_myDLL.
Это регистрирует некоторые функции в dll, чтобы я мог вызывать их из Lua, а затем должен запустить функцию initComunication () в своем собственном потоке, чтобы оригинальный скрипт Lua мог продолжать работать.
Кажется, что отсоединение не работает.