В c++ я не силен поэтому ищу помощь.пытаюсь выполнить функцию из нового потока "lua_State* L1 = lua_newthread(L);" если раньше код "32 dit версии quik"
работал почти безупречно
Код |
---|
lua_State* L1 = lua_newthread(L);
lua_gc(L1, LUA_GCSTEP, 100); // выполняет постепенный этап сбора мусора
lua_pushstring(L1, "main1");//Находит в стеке Lua функцию по ее названию и помещает ее наверх стека
lua_gettable(L1, LUA_GLOBALSINDEX);
lua_pcall(L1, 0, 0, 0);
|
то 64bit версии я уже так сделать не могу
Код |
---|
void newpotok(lua_State* L)
{
while (lua_isfunction(L, 1) != 1)
{
lua_getglobal(L, "main1"); Sleep(100); // ТУТ ЦИКЛ ТК НЕ ВСЕГДА НАХОДИТ НУЖНУЮ ФУНКЦИЮ ПРАВДА В ЭТОМ СОСТОЯНИИ ФУНКЦИЯ РАБОТАЕТ
}
lua_State* L1 = lua_newthread(L);
lua_settop(L1, 0);// уст кол-во элементов в стеке. 0 - очистить стек.
while (lua_isfunction(L1, 1) != 1)
{
lua_xmove(L, L1, 1);); ТУТ МЕНЯЛ ЗНАЧЕНИЯ МЕСТАМИ НИ ЧЕГО ПЕРЕДАЧА ФУНКЦИИ ДРУГОМУ ПОТОКУ
lua_getglobal(L1, "main1"); Sleep(100); //
}
lua_pcall(L1, 0, 0, 0); //////////// НЕ ПОЛУЧАЕТСЯ ВЫПОЛНИТЬ ////////////////////////////////////////////////////////////////////////
};
static int forLua_runMAIN1(lua_State* L)
{
std::thread thr(newpotok, L); //Запускает выполнение функции MyCallback() в отдельном потоке
thr.detach(); //Отсоединяет созданный поток от основного, делая его "фоновым"
return (0); //Завершает работу функции forLua_StartCallback, при этом функция MyCallback продолжает работать в отдельном потоке
}
|