1

Тема: 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.

Что то не понятно.

2

Re: SetUpdateCallbackcallback в Lua C api - перезаписывает заказы.

1) Если сделать все без потоков, с использованием переданного вам стека Lua?
2) Если этот же алгоритм сделать на Lua - проблема с "пропаданием" подписок также проявится?

Если выяснится, что на чистом Lua эта проблема есть (т.е. в 2 - ответ "да") - то это просто выглядит как косяк терминала, тогда надо сообщить разработчикам.

3

Re: SetUpdateCallbackcallback в Lua C api - перезаписывает заказы.

swerg пишет:

1) Если сделать все без потоков, с использованием переданного вам стека Lua?
2) Если этот же алгоритм сделать на Lua - проблема с "пропаданием" подписок также проявится?

Если выяснится, что на чистом Lua эта проблема есть (т.е. в 2 - ответ "да") - то это просто выглядит как косяк терминала, тогда надо сообщить разработчикам.

2)Нет, на чистом Lua - такой проблемы нет.
1)Я вот пытаюсь понять, как бы мне сделать без "потоков" - только на Одном переданном Lua-стека.

Тут загвоздка такая:

Предположим я заказал SetUpdateCallbackcallback к примеру по 10 инструментам сразу и все эти 10 инструментов в квике не открыты и гарантировано будут запрашивается на сервере - а значит мне придется добавлять и удалять данные из общего Lua-Стека - я предполагаю, что это приведет к ошибке.

4

Re: SetUpdateCallbackcallback в Lua C api - перезаписывает заказы.

Если написать требуемый алгоритм просто на Lua - все же будет работать и ничего пропадать не будет и не будет ошибок, верно?
Значит и другие стеки совершенно не нужны для вашей задачи. Раз интерпретатор Lua обходится одним стеком для того же самого.

5

Re: SetUpdateCallbackcallback в Lua C api - перезаписывает заказы.

swerg пишет:

Если написать требуемый алгоритм просто на Lua - все же будет работать и ничего пропадать не будет и не будет ошибок, верно?
Значит и другие стеки совершенно не нужны для вашей задачи. Раз интерпретатор Lua обходится одним стеком для того же самого.

Так то оно правильно smile
Вопрос, как написать работу со стеком на Lua C api smile

6

Re: SetUpdateCallbackcallback в Lua C api - перезаписывает заказы.

Serg_ пишет:

Вопрос, как написать работу со стеком на Lua C api smile

А что вы сделать-то хотите? по смыслу.