Michael Bulychev (Все сообщения пользователя)

Выбрать дату в календареВыбрать дату в календаре

Страницы: Пред. 1 2 3 4 5 6 7
вопрос по коллбекам, к разработчикам (ONLY)
 
Цитата
sam063rus пишет:
я просто пока не могу понять, как скрипт прерывается при приходе очередного колбека (без всяких майнов и прочего). вот и всё. если у вас нет ответа на мой - я постараюсь найти его сам. но это очень прискорбно, что я не могу найти ответа на такой, казалось бы простой вопрос тут.
прервать выполнение кода на луа можно:
1. Повесить хук на отладчик.
2. В определенных ситуация можно сказать yeld / resume
3. Сделать lua_lock/lua_unlock
вопрос по коллбекам, к разработчикам (ONLY)
 
Цитата
sam063rus пишет:
имеется ввиду не весь скрипт, а строчка из него, конечно
Вас интересует возможность прервать выполнение скрипта из программы или что-то другое?
вопрос по коллбекам, к разработчикам (ONLY)
 
да. С таблицами обеспечивается только "физическая" целостность, не логическая.
вопрос по коллбекам, к разработчикам (ONLY)
 
Цитата
sam063rus пишет:
то есть, вопрос, по сути, можно развернуть так:
есть петля в теле скрипта (без майн), есть коллбеки. на время коллбеков петля в скрипте прерывается и идёт обработка коллбека. как?
я не знаю, честно.
вопрос по коллбекам, к разработчикам (ONLY)
 
Цитата
sam063rus пишет:
вы не ответили.

как у вас происходит/реализовано программно прерывание работы скрипта на время обработки кода из коллбека?
Ответил - никак. Это разные потоки операционной системы. Стеки существуют независимо друг от друга. Но доступ к глобальным данным синхронизован. Это значит что:

Код
x=1 
function OnParam() 
   ...
   x=2  
   ...
end 
function main()  
   ...
   x=3 
   ...
end  
OnParam и main исполняются в разных потоках OC, но при обращении к x, произойдет блокировка, изменение данных и разблокировка.
вопрос по коллбекам, к разработчикам (ONLY)
 
Цитата
sam063rus пишет:
Михаил, я уже объяснил вполне доступно: есть стандартный message loop в библиотеке, есть код в коллбеках - и то и то вполне себе параллельно работают. как? напрашивается ответ, что на время прихода коллбеках идёт переключение работы кода на них, а потом возобновление работы кода из message loop библиотеки. и причём, без потоков и корутин.
в qlua.dll создается два отдельных стека Lua - для колбеков и для main(). Обращение к глобальным данным из этих функций синхронизировано средствами Lua.
вопрос по коллбекам, к разработчикам (ONLY)
 
Я пока  не очень понимаю о чем идет речь, но вот такую функцию:

Код
lua_register(L, "Loop", MyLoop); 
... 
int MyLoop(lua_State *L) 
{ 
   while(true)  
   { 
      ... 
   } 
   return 0;
}  

лучше не писать.
вопрос по коллбекам, к разработчикам (ONLY)
 
Никак.
вопрос по коллбекам, к разработчикам (ONLY)
 
Добрый день.
а) да, скрипт выполняется весь один раз при загрузке.
б) необязательно, зависит от реализации
sendTransaction
 
Цитата
Николай Камынин пишет:
Может объясните, как эмуляцией с использованием OnTransReply
можно получить результат транзакции без использования OnTransReply

Николай, фразу
Цитата

Только эмуляцией, с использованием sendTransaction и OnTransReply.
следует понимать так, что получить результат можно только используя эти две функции. Часть ошибок действительно можно получить непосредственно из sendTransaction, но это касается ситуаций когда транзакция еще не отправлена на сервер. То есть те ошибки, которые может диагностировать терминал - некорректная бумага, класс, транзакция и т.п. Все остальное приедет только в OnTransReply.
Возможно я недостаточно подробно объяснил свою мысль, но сарказм и риторические вопросы только затягивают обсуждение.
qlua + mysql
 

mysql.dll лежит в папке со скриптом:
Код
assert (package.loadlib(getScriptPath() .. "\\mysql.dll", "luaopen_luasql_mysql")) ()

gSQLEnv = nil
gSQLConn = nil

function OnInit(path)
   gSQLEnv=luasql.mysql()
   assert(gSQLEnv)
   message(tostring(gSQLEnv))
end

function main()
   
end
 
sendTransaction
 
Цитата
Николай Камынин пишет:
Добрый день, Михаил,
Хорошо бы увидеть конкретный ответ.
А то "эмуляция", хотя и короче двух слов и предлога между ними, но звучит почти также.
Эмуляция
sendTransaction
 
Цитата
Николай Камынин пишет:
А что такое "эмуляция"?
----------------------------------------------
ВИки: Эмуля́ция ( англ. emulation ) в вычислительной технике — комплекс программных, аппаратных средств или их сочетание, предназначенное для копирования (или эмулирования ) функций одной вычислительной системы ( гостя ) на другой, отличной от первой, вычислительной системе ( хосте ) таким образом, чтобы эмулированное поведение как можно ближе соответствовало поведению оригинальной системы ( гостя ).
------------------------------------------
Вы это рекомендуете?
Добрый день, Николай.
Вопрос риторический или Вам нужен ответ?
sendTransaction
 
Цитата
Вячеслав пишет:
Как получить результат транзакции, без использования OnTransReply ?

res=sendTransaction( transaction )
message ( "res= ".. tostring(res) .. " STATUS= ".. tostring(res.status) .. " DESCRIPTION= "..tostring(res.description) .. " result_msg = "..tostring(res. result_msg ) ,1)
Всё в куче, везде nil.
Добрый день.
Только эмуляцией, с использованием sendTransaction и OnTransReply.
Формат даты
 
Цитата
Николай Камынин пишет:
Если без особых выкрутасов, то можно упростить:

function DateFormat(date, input_fmt, output_fmt)
local day = date:sub(input_fmt:find("([d|D]+)" ;)
local month = date:sub(input_fmt:find("([m|M]+)" ;)
local year = date:sub(input_fmt:find("([Y|y]+)" ;)
local outstr = output_fmt:gsub("([d|D]+)", day)
local outstr = outstr:gsub("([m|M]+)", month)
local outstr = outstr:gsub("([y|Y]+)", year)
return outstr
end

примерно в 2 раза быстрее.
Добрый день.
Только работает не так как в моем примере.
Можно ли как-то обновиться до lua 5.3?, Текущая версия lua 5.1 вышла 9 лет назад
 
Цитата
Владимир Петров пишет:
Здравствуйте, существует ли техническая возможность переключиться на версию lua 5.3? Текущая версия 5.1 вышла 9 лет назад.
Добрый день.
вся проблема в том, что начиная с версии 5.2 потерялась обратная совместимость в API языка.
Пожелания по квику и LUA
 
Добрый день.
Вам кажется.
Формат даты
 
Цитата
Серж пишет:
Michael Bulychev , спасибо.
Однако, маленькая ремарка: в паттернах Lua нет " или ", поэтому использование символа " | " будет лишним
Да, спасибо. Издержки PCRE.
Формат даты
 
Цитата
Серж пишет:
Задача: написать функцию форматирования даты:
Код
 _DateFormat(date, input, output), 
где date - дата в строковом формате,
input - формат ввода,
output - формат вывода.

Пример:
Код
 _DateFormat("11.02.2015", "dd.mm.yyyy", "yyyymmdd")
 

На выходе получаем: " 20150211 "

Есть идеи, как это осуществить?

Код
function DateFormat(date, input_fmt, output_fmt)
   
   local day = tonumber(date:sub(input_fmt:find("([d|D]+)")))
   local month = tonumber(date:sub(input_fmt:find("([m|M]+)")))
   local year = tonumber(date:sub(input_fmt:find("([Y|y]+)")))
   
   local d_start, d_end = output_fmt:find("([d|D]+)")
   local m_start, m_end = output_fmt:find("([m|M]+)")
   local y_start, y_end = output_fmt:find("([Y|y]+)")
   
   local outstr = output_fmt:gsub("([d|D]+)", string.format("%0".. d_end-d_start+1 .."d", day))
   local outstr = outstr:gsub("([m|M]+)", string.format("%0".. m_end-m_start+1 .."d", month))
   local outstr = outstr:gsub("([y|Y]+)", string.format("%0".. y_end-y_start+1 .."d", year))
   return outstr
end

print(DateFormat("11.02.2015", "dd.mm.yyyy", "yyyy.mm.dd")) -- 2015.02.11
print(DateFormat("11.02.2015", "dd.mm.yyyy", "mm.dd.YYYY")) -- 02.11.2015
print(DateFormat("20150201", "yyyymmdd", "yyyy mmmm dd"))   -- 2015 0002 01
print(DateFormat("20150201", "yyyymmdd", "yyyy mmmm d"))   -- 2015 0002 1
print(DateFormat("20150201", "yyyymmdd", "yyyy mm dd"))      -- 2015 02 01
print(DateFormat("01/02/1999", "dd/mm/yyyy", "yyyy/mm/dd"))   -- 1999/02/01
 


без всяких проверок, вставьте их сами если надо
Библиотека QCtrls.dll
 
Цитата
sam063rus пишет:
то есть, если у нас уже есть в квике qtable нам, как трейдерам, проще было бы обращаться к нему, как-то вот так:
Код
 local qtHandle = 0
 qtHandle = CreateEntityByName("QTABLE")

qtHandle.qtprop = {
Caption = "",
Rows = 2,
Col = 2
}

 
Код
QTable = {}
QTable.property = {
                    x=0, 
                    y=0, 
                    width=100, 
                    height=100, 
                    caption ="QLua Table", 
           t_id=-1
                   }
QTable.mt = {} 
QTable.mt.__index = function(table, key)
  return QTable.property[key]
 end
QTable.mt.__newindex = function(table, key, value)
  QTable.property[key]=value -- или вызывать функцию для таблицы
 end 
...
 qt = QTable.new {Caption="New Table"}
Ну и далее в том же стиле...

Я просто хочу показать, что сделать ОО интефейс к существующим функциям задача не хитрая. Причем нет разницы где это делать - в скрипте на Lua или в qlua.dll. API для этого используется одно и тоже.
Вся проблема в том, что никто внятно не может рассказать какими объектами хочется оперировать, какими свойствами они должны обладать, какие интерфейсы предоставлять, как взаимодействовать друг с другом и т.п.
Библиотека QCtrls.dll
 
Цитата
sam063rus пишет:
кстати, вот актуальный мини-срач по схожей теме: http://www.gamedev.ru/code/forum/?id=147765
так... для общего, как говорится.
Попробуйте донести основную мысль этой ветки. Ничего нового я там не обнаружил.
Библиотека QCtrls.dll
 
Цитата
sam063rus пишет:
ну тогда сделайте их доступными из QLUA сами. и сделайте уже нормальный бинд вашего qtable. пример того, как обходятся в CryEngine без метатаблиц Вам уже давали.
А что сейчас не устраивает в функциях работы с таблицами? Сразу повторюсь - завернуть эти функции в "класс" не сложно средствами самого Lua, тем более что пример как это можно сделать у нас есть.
Тот пример что Вы прислали - это просто пример реализации наследования от базового класса. Для этого надо сначала определить сам базовый класс, о чем я и просил Вас. Напишите в свободной форме что вы хотите получить.
Библиотека QCtrls.dll
 
Цитата
sam063rus пишет:
В связи с тем, что секция экспорта в библиотеке пользовательских контролов имеет открытый интерфейс, могу ли я, сделав к ней QLUA-бинд использовать её в своих программах на qlua?
нет, не можете.
Пожелания по квику и LUA
 
Цитата
sam063rus пишет:
Михаил,

см. #35

Если Вы про то, что Вам надо подробную иерархию классов - что ж, я могу её составить. В какой форме желаете? В формате сообщения в посте - тесно, в формате e-mail - тогда другие участники не смогут подключиться к обсуждению и редактированию.
Давайте уже в любой форме.
Пожелания по квику и LUA
 
Цитата
sam063rus пишет:
Класс скрипта, класс для бумаги. Класс для работы с глобальными переменными.
Добрый день.
Можете подробнее описать что требуется?
Пожелания по квику и LUA
 
Цитата
sam063rus пишет:
Да. Но стек в LUA - не резиновый, а сборщик мусора - невсегда предсказуемый. К тому же, если объектов - чуть меньше чем (ну Вы сами понимаете... ) то, мы очень сильно теряем в производительности. Насчёт простоты, гибкости и синтаксического "сахара". - Вот, как-раз за "сахар" и официально декларируемый подход к тому, что мол де, хорошие программы не нуждаются в комментариях я бы, как и многие,подвесил Роберто за ..
Давайте оставим в стороне Ваши оценочные суждения о языке, тем более если они не подтверждены фактами.
Если у Вас примеры связанные с переполнением стека, сборщиком мусора или потерей производительности, то приведите пример кода и мы попробуем с ним разобраться.
Пожелания по квику и LUA
 
С подобными хуками и эвентами более-менее понятно. По моему мнению, подобные конструкции как раз легче сделать на Lua - реализация получается более гибкой, простой и понятной. Остается вопрос про отдельные потоки для роботов.
Вообще, если читать первоисточники по скриптовым языкам, не только Lua, то вопрос многопоточности для них очень не простой. Речь идет именно о "честной", вытесняющей многопоточности, а не о кооперативной. Практически везде рекомендуют использовать встроенный в язык механизм сопрограмм, либо запускать потоки с разными виртуальными машинами и обмен данными между ними через аналоги сообщений и очереди. как пример реализации - Lua lanes. В LuaJIT, насколько я помню, вообще отсутствуют функции lua_lock/lua_unlock, вместо этого пользователю самому предлагается заботится о синхронизации доступа к данным.
Пожелания по квику и LUA
 
Цитата
sam063rus пишет:
Также Вы говорите, что это всё можно реализовать и средствами самого LUA. Чтож, как говорится "You are welcome!". Давайте, покажите нам, наконец на хотя бы на одном примере, как это делается.
Добрый день.
"реализация классов" не самая сложная задача. Но, для того чтобы от них была польза, необходимо хотя бы в общих чертах представлять себе алгоритмы обработки данных и уровни абстракции, которые используют Ваши роботы. В начале ветки Вы декларируете желание иметь реализацию функций обратного вызова на все возможные события, в том числе и заданные по условию :
Цитата

К примеру, есть бумага, есть условие по ней, оформленное в виде функции. При срабатывании условия квик вызывает коллбек.
И при этом иметь около 30 роботов, каждый из которых работает в независимом потоке ОС, без очередей данных и сопрограмм. Пока я не очень представляю себе как это все будет выглядеть. Именно поэтому я и прошу хотя бы пример реализации в псевдокоде. Если у Вас нет готового примера, то можете привести ссылку на игровой движок, реализацию которого Вы считаете удачной.
Пожелания по квику и LUA
 
Цитата
sam063rus пишет:
мне нет нужды запускать отдельно в каждом скрипте через меню робота. т.е. я хочу, чтобы, к примеру, нажав в меню - "запустить скрипт" - у меня одновременно начало торговать 30 роботов, не зависимо и на разных интсрументах. В идеале, распараллелено по разным потокам и процессорам (правда за параллелизм по процессорам отвечает уже операционная система)
можете привести пример такого "робота" в псевдокоде? Что бы было понятно о чем идет речь.
Пожелания по квику и LUA
 
Цитата
sam063rus пишет:
а в личных целях разрешаете ковыряться/использовать?
Нет.
T()
 
Цитата
s_mike@rambler.ru пишет:
А можно ли вернуться к первому посту этой ветки?

Все-таки очень интересно, что такое count в функции Т()
Добрый день.
Это сделано для того, чтобы различать тики пришедшие с одинаковой меткой времени. Нумеруются терминалом в порядке получения.
Пожелания по квику и LUA
 
Цитата
sam063rus пишет:
и ещё вопрос, а можно поинтересоваться: кто написал qchart.dll?
чувствуется школа Мастера Feng Yuan.
Если есть что спросить по делу - задайте вопрос более развернуто.
Пожелания по квику и LUA
 
Цитата
sam063rus пишет:
Цитата
Michael Bulychev пишет:
Добрый день.
по пунктам:
1. К сожалению, этого сделать не получится по многим причинам.
2. Над этим вопросом мы работаем, подобные пожелания у нас уже зарегистрированы.
Пункты 3, 5, 6, 7 - в пределах одного скрипта это можно и сейчас реализовать средствами Lua без доработок с нашей стороны.
8 - Профайлер для Lua . Над отладкой с помощью Decoda можно подумать, там тоже все не очень просто. Например, невозможно отлаживать скрипты оставаясь подключенным к серверу.
Пункт 4 - поясните подробнее как бы Вы хотели видеть реализацию
1. Хотелось бы конкретики, если можно, по этим причинам.
3.5.6.7. Да, можно, с корутинами и очередями НО! Это будет тот ещё велосипед и пойди разберись потом в листинге. Даже одна метатаблица вызывает шок у неподготовленного скриптера, а что говорить о рядовых трейдеров? Ведь это софт не для программистов, а для трейдеров.
4. Интересует возможность иметь общий кеш памяти или там кеш переменных, чтоб ими обмениваться между двумя скриптами, (т.е. двумя виртуальными машинами со своими lua-state) и стало быть, двумя потоками ОС. тут народ кричит, что надо shared memory. Но мы то знаем, что это тоже не панацея, правда, в 3d-играх, активно используется, например при обращению к кешу ресурсов (скрипты, текстуры, меши, аудио, видео). Есть варианты реализации, направленные на разделение потоков по принципу read/write. Есть универсальные базовые методы: interlockedIncrement/decrement. Но, это всё (пункт 4.) - потребует от Вас создания внутреннего класса менеджера памяти с функциями арбитража потоков - т.к. в LUA это - явно выносить не нужно. есть ещё варианты. это, так сказать, что пришло/вспомнилось на ум.
пункт 1 - предлагаю просто поверить на слово. Дать такое API мы не можем.
Запуск двух копий одного скрипта
 
Цитата
sam063rus пишет:
хорошо, другой вопрос, а vclua можно?
Проще, наверное, спросить у разработчиков VCLua
Запуск двух копий одного скрипта
 
Цитата
sam063rus пишет:
Цитата
Michael Bulychev пишет:
его нельзя дважды загрузить в процесс
Почему? Где это написано?
(я, конечно, не спорю но, хотелось бы конкретики)
Насколько я помню, это написано в файле \src\iup_open.c
Запуск двух копий одного скрипта
 
Цитата
Евгений пишет:
Т. е. если я диалоговое сделаю таблицей без использования iup, то запуск двух копий станет возможным?
Если речь о встроенных таблицах терминала - да, возможно.
Пожелания по квику и LUA
 
Добрый день.
по пунктам:
1. К сожалению, этого сделать не получится по многим причинам.
2. Над этим вопросом мы работаем, подобные пожелания у нас уже зарегистрированы.
Пункты 3, 5, 6, 7 - в пределах одного скрипта это можно и сейчас реализовать средствами Lua без доработок с нашей стороны.
8 - Профайлер для Lua. Над отладкой с помощью Decoda можно подумать, там тоже все не очень просто. Например, невозможно отлаживать скрипты оставаясь подключенным к серверу.
Пункт 4 - поясните подробнее как бы Вы хотели видеть реализацию
Запуск двух копий одного скрипта
 
Добрый день.
Скорее всего причина в IUP, его нельзя дважды загрузить в процесс
Какая версия луа используется в квике?
 
Добрый день.
между этими двумя версия разницы практически нет
Списки кодов классов и бумаг
 
Повторюсь еще раз - такая ситуация невозможна без реконнекта терминала к серверу. Если говорить точнее, то без рестарта сервера, что приведет к реконнекту терминала.
То есть в любом случае клиент это заметит и после установления связи получит бумагу с новыми параметрами.
Списки кодов классов и бумаг
 
Такая ситуация невозможна.
Списки кодов классов и бумаг
 
Цитата
Серж пишет:
Также может измениться информация, получаемая функциями getClassInfo() и getSecurityInfo() без переподключения к серверу?
нет, если класс или бумага уже есть, то их параметры без переподключения не изменятся.
Списки кодов классов и бумаг
 
В текущей реализации только постоянно анализируя классы и бумаги
Списки кодов классов и бумаг
 
Добрый день.
Да, могут.
Заказ всех сделок, Использование CreateDataSource для заказа всех сделок
 
Добрый день.
пришлите нам дамп падения терминала.
Какая версия луа используется в квике?
 
Цитата
Владимир Б****ов пишет:
Добрый день

Вопрос в теме

Спасибо
5.1.5
Страницы: Пред. 1 2 3 4 5 6 7
Наверх