SetUpdateCallbackcallback в Lua C api - перезаписывает заказы:
Из скрипта квика вызывается Сищная-функция: в нее соответственно автоматически передается или создается Lua-Стек:
Приведенный код частично условный, чтобы не загромождать кодом страницу.
Но суть в том, что - я создаю два новых "потока" от главного Луа-стека:
-Вызываю для каждого из двух созданных "потоков" - функцию CreateDataSource и навешиваю колбек через SetUpdateCallback.
-Первый и примерно второй и третий - колбеки - выводят интервал "INTERVAL_H2" - то есть это тот интервал, который я запросил первым у CreateDataSource...
-НО! Как только вызывается второй CreateDataSource для второго "потока" и навешивается callback - после этого любой вызываемый callback приходит только с интервалом "INTERVAL_H4" - что соотвевует второму вызову CreateDataSource - ТО ЕСТЬ произошло, как бы затирание подписки на колбек...
-НО ПОЧЕМУ ? Ведь я создал два разных "потока" которые хоть и связаныс основным луа-стеком, но сами обладают свои стеком, в который я и записываю результа от CreateDataSource.
Что то не понятно.
Из скрипта квика вызывается Сищная-функция: в нее соответственно автоматически передается или создается 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.
Что то не понятно.