Создать поток с Boost / C ++ и позволить родительскому потоку умереть - PullRequest
1 голос
/ 25 марта 2012

У меня есть приложение 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 мог продолжать работать.

Кажется, что отсоединение не работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...