Тема: SetUpdateCallbackcallback в Lua C api - перезаписывает заказы.
SetUpdateCallbackcallback в Lua C api - перезаписывает заказы:
Из скрипта квика вызывается Сищная-функция: в нее соответственно автоматически передается или создается Lua-Стек:
Код
int my_callback(lua_State* L)
{
//Доп.пераметры извелкаем через lua_upvalueindex.
std::cout<<"interval_int:" <<interval_int <<std::endl;
}
void my_call_CreateDataSource(lua_State* L_, name_class_insrument, name_code_paper, interval_int)
{
lua_getglobal(L, "CreateDataSource");
lua_pushstring(L,_ name_class_insrument);
lua_pushstring(L_, name_code_paper);
lua_pushnumber(L_, interval_int);
int status_lua_pcall = lua_pcall(L, 3, 2, 0);
my_call_SetUpdateCallback(L_, my_callback, name_class_insrument, name_code_paper, interval_int); //Вызываем SetUpdateCallback и передаем в нее функцкиб обратного вызова и доп.параметры.
}
int ruc_cpp(lua_State* L_main)
{
lua_State* L_1 = lua_newthread(L_main); //Создаю "поток" связанный с главным стеком.
lua_State* L_2 = lua_newthread(L_main);
my_call_CreateDataSource(L_1 , "TQBR", "GAZP", "INTERVAL_H2");
my_call_CreateDataSource(L_2 , "TQBR", "GAZP", "INTERVAL_H4");
//-----------------------------------------------
for (int i = 0; i < 1000000; i++)
{
std::this_thread::sleep_for(std::chrono::milliseconds(100));
}
//-----------------------------------------------
}
Приведенный код частично условный, чтобы не загромождать кодом страницу.
Но суть в том, что - я создаю два новых "потока" от главного Луа-стека:
-Вызываю для каждого из двух созданных "потоков" - функцию CreateDataSource и навешиваю колбек через SetUpdateCallback.
-Первый и примерно второй и третий - колбеки - выводят интервал "INTERVAL_H2" - то есть это тот интервал, который я запросил первым у CreateDataSource...
-НО! Как только вызывается второй CreateDataSource для второго "потока" и навешивается callback - после этого любой вызываемый callback приходит только с интервалом "INTERVAL_H4" - что соотвевует второму вызову CreateDataSource - ТО ЕСТЬ произошло, как бы затирание подписки на колбек...
-НО ПОЧЕМУ ? Ведь я создал два разных "потока" которые хоть и связаныс основным луа-стеком, но сами обладают свои стеком, в который я и записываю результа от CreateDataSource.
Что то не понятно.