101 (2015-02-05 10:45:43 отредактировано GREEN_X5)

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

Михаил, к Вам вопрос

mbul пишет:

То решение, которое я предложил и дал паре человек попробовать- это скорее "грязный хак".
Побочный эффект - библиотека не выгружается при остановке скрипта.

Не выгружается откуда, из процесса info.exe? Почему спрашиваю, вчера погонял разные вариации простых скриптов на Вашей "хак-версии" ), в том числе без Release формы, и в какой-то момент получил неизвестную ошибку, после которой не смог перезапустить скрипт со 100% рабочими исправлениями. Самое интересное - перезагрузка Квик не помогала. Процесс info выгружался, я проверял. winros даже не запускался. Помог только ребут оси.
Файл библиотеки давал себя переименовывать на всех этапах.
Новое для меня поведение квик+qvcl, поэтому спрошу.
1. Это тот самый "побочный эффект"? Теперь библиотека не выгружается из оси?
2. Можно в таком случае поймать и прибить библиотеку в диспетчере задач, или где-то ещё?
Любые мысли по этому поводу. Спасибо.

да, добавлю. Скрипт в этом случае спотыкался на определении формы.

myForm = vcl.Form({Name = "myForm", OnClose = OnStop, Visible=true})

Без этой строчки запускался без проблем. Квик предварительно перезагружался вместе с процессом info.
Вот и хочется понять, где эта форма осталась не убитой.

102

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

Если позволите - можно я отвечу.

GREEN_X5 пишет:

Не выгружается откуда, из процесса info.exe?

Именно так.

GREEN_X5 пишет:

в том числе без Release формы, и в какой-то момент получил неизвестную ошибку, после которой не смог перезапустить скрипт со 100% рабочими исправлениями.

myForm = vcl.Form({Name = "myForm", OnClose = OnStop, Visible=true})

Нельзя создать формы (т.е. элементы vcl.Form) с одинаковыми именами в рамках одной запущенной библиотеки в рамках одного процесса. Вы же явно устанавливаете имя Name = "myForm", но форму не уничтожаете, т.к. нет Release. Значит при повторном запуске просто возникает ошибка "Форма с таким именем уже есть". Поскольку эта ошибка выбрасывает исключение - видим падение терминала.

В версии 0.5.0 VCLua это свойство можно не задавать вовсе, тогда библиотека заполняет его самостоятельно случайным значением, и проблем с повторным созданием формы (или запуском нескольких идентичных скриптов) не возникает. А т.к. это имя нам по факту нигде не требуется - такой подход (не задавать значение свойству Name ни для каких элементов) при использовании версии 0.5.0 отлично себя оправдывает.

GREEN_X5 пишет:

1. Это тот самый "побочный эффект"? Теперь библиотека не выгружается из оси?

При завершении процесса библиотеки выгружаются.
Но не исключено, что при особо кривых сценариях завершения процесса ОС где-то не справляется с этой задачей.

GREEN_X5 пишет:

2. Можно в таком случае поймать и прибить библиотеку в диспетчере задач, или где-то ещё?

В диспетчере задач вы видите процессы, запущенные из exe-файлов. Какие они при этом подгружают dll-ки - только спец. приборами можно увидеть.

В вашем случае, думаю, терминал QUIK упал так криво (это не претензия к терминалу, просто констатация), что OC не смогла корректно вычистить из-под него ресурсы, что, конечно, странно, но, вероятно, бывает.


Но основная мысль, которую я бы хотел донести, состоит в следующем.
Есть масса интересных задач создания собственно роботов в QUIK.
Здесь же мы мусолим очень частную задачу остановки скрипта, которая - по идее - для работающего робота возникает очень редко. Причем в чем проблема - уже понятно.
По-моему, нет смысла копать эту историю массово далее, т.к. это зряшняя трата собственных ресурсов Lua-программистов. Ну на мой взгляд.
Причем есть стопроцентный вариант - не завершать main(), останавливать робота кнопкой "Остановить" - и все работает надежно, 5-ти секундная задержка - ерунда. По-моему, это лучшее решение на данный момент. Причем вполне простое.

Варианты придумать что-то в библиотеке и, главное, дождаться исправления поведения терминала в этом месте - не исключаются, конечно.

103

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

swerg пишет:

Причем есть стопроцентный вариант - не завершать main(), останавливать робота кнопкой "Остановить" - и все работает надежно, 5-ти секундная задержка - ерунда.

У такого варианта есть один минус: если закрыть терминал, не остановив скрипт, то при следующем запуске скрипт автоматически запустится. Т.е., нельзя создать робота без автозапуска.

104 (2015-02-05 11:49:43 отредактировано GREEN_X5)

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

swerg,
спасибо за развернутый ответ. Про запуск двух форм с одним именем знал, но всё равно спасибо. )
Речь именно об этом частном случае:

В вашем случае, думаю, терминал QUIK упал так криво (это не претензия к терминалу, просто констатация), что OC не смогла корректно вычистить из-под него ресурсы, что, конечно, странно, но, вероятно, бывает

.
Повторюсь:
1. Запуск скрипта с исключением в части vcl. Терминал не падает, но выдает неизвестную ошибку.
2. Исправляем в скрипте причину исключения. Повторный запуск скрипта - неизвестная ошибка. Место ошибки - объявление переменой формы.
3. Перезапуск Квик, процесс info также перезапущен, запуск скрипта - неизвестная ошибка (скрипт по-прежнему без ошибок)
4. Перезагрузка оси - скрипт запустился без ошибок.
Вопрос - где застряли хвосты переменных библиотеки, если перезапуск процесса info не помог. И где их ловить. Или - возможно ли прописать в начале скрипта убийцу хвостов предыдущего запущенного потока(?).
Мне это действительно интересно. Поэтому и спрашиваю того, кто может ответить. Вопрос в рамках темы.
Спасибо.

105 (2016-09-29 11:20:53 отредактировано sam063rus)

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

-

106

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

Вот бы еще понять как это поможет.
Может приведете пример исправленного кода на основании этой статьи?

107 (2015-02-05 14:05:08 отредактировано Krepysh)

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

swerg пишет:

Проблема не в vclua. При применённом подходе в терминале 6.16 версии проблема может возникать при использовании любой сколь-нибудь сложной dll, выполняющей какие-либо финализирующие действия при своей выгрузке.

Как я понимаю, чтобы не было падения, необходимо не дать main() завершиться раньше, чем полностью выполнятся эти "финализирующие действия".
Могу предложить такой шаблон (для более сложных форм может потребоваться увеличение времени ожидания):

function _CloseGUI()
  is_run = false
  hMainForm:Release()
  is_run = nil
end
hMainForm.OnClose = _CloseGUI
function main()
  while is_run do
    sleep(50)
  end
  while is_run ~= nil do sleep(50) end  -- Если нажата кнопка "Остановить", то lua_close() будет вызван в основном потоке
  local t = os.clock()
  repeat sleep(1) until os.clock() - t > 0.2  -- Подождём пока уничтожится форма
end
function OnStop()
  is_run = false
  mainForm:Release() -- уничтожим основную форму скрипта при нажатии "Остановить"
  return 200  -- Не нужно ждать 5 сек завершения скрипта
end

Теперь скрипт можно остановить закрытием окна крестиком.

108

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

Таки разобрался с Grid. Чтобы удалить все столбцы:

for i = 0, hGrid.ColCount-1 do hGrid:DeleteColRow(true, 0) end

109 (2015-02-05 18:37:37 отредактировано kalikazandr)

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

Krepysh пишет:
function OnStop()
  is_run = false
  mainForm:Release() -- уничтожим основную форму скрипта при нажатии "Остановить"
  return 200  -- Не нужно ждать 5 сек завершения скрипта
end

вот так ровнее будет:

function OnStop()
  mainForm:Release()
  is_run = false
end
function main()
  while is_run do
    sleep(50)
  end
  sleep(300)
end

Когда вы перед закрытием формы сбрасываете флаг в false, то main() завершается до закрытия формы. И огород с ожиданием закрытия формы не надо городить

110

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

kalikazandr,
почитайте, что я писал чуть выше и потестируйте на более сложной форме: где бы вы не сбросили флаг, фактическое удаление формы произойдёт позже. И даже позже вашего sleep().

111

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

Можно ли отследить изменение ширины колонки пользователем в Grid?

112

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

Krepysh пишет:

Можно ли отследить изменение ширины колонки пользователем в Grid?

Нет.

113 (2015-02-06 11:05:05 отредактировано Krepysh)

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

swerg пишет:
Krepysh пишет:

Можно ли отследить изменение ширины колонки пользователем в Grid?

Нет.

А получить ширину каждой колонки можно?

114

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

Добрый день. А окно авторизации по типу квиковского как-то можно сделать?

115

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

В какой момент это окно должно возникнуть?

116

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

swerg пишет:

В какой момент это окно должно возникнуть?

При старте робота кнопкой "запустить", без правильного пароля робот будет по другой стратегии работать

117

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

" Вот так одна ошибка во вводе пароля убила Васин депозит"
Хе хе.

118

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

kalikazandr пишет:

Добрый день. А окно авторизации по типу квиковского как-то можно сделать?

Нет, нельзя. vcl не позволяет нарисовать форму Form, нет элемента Edit и кнопки Button.

119

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

slkumax пишет:

" Вот так одна ошибка во вводе пароля убила Васин депозит"
Хе хе.

мало того, удалить все расширения .dll, .lua, включая исполняющий скрипт.

120 (2016-09-29 11:21:07 отредактировано sam063rus)

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

-

121

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

sam063rus пишет:

Убийство алгоритмом робота dll и других файлов (в том числе себя) - в большинстве случаев, активизирует алгоритм работы антивируса.

антивирус не срабатывает, удаляется то, что надо, без проблем.
а на счет всего остального - вы что-то путаете, я не собираюсь делать платных торговых роботов. и мне пофик, что моего робота стырят. без определенных настроек он очень быстро обнулит любой счет при первом запуске.

122 (2016-09-29 11:21:20 отредактировано sam063rus)

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

-

123 (2015-02-08 00:16:38 отредактировано kalikazandr)

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

sam063rus пишет:

p.s. если антивирус не срабатывает то, это не ваша заслуга, как говорится, а ваша недоработка.

с какой точки вести обзор. а покупать торговых ботов - идиотизм.
Вы что-то курите походу и дурь видимо сильная, угостите.

124 (2016-09-29 11:21:31 отредактировано sam063rus)

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

-

125

Re: Визуальный интерфейс QVCLua: обсуждения, замечания, предложения

sam063rus пишет:

ну а смысл тогда во всех этих окнах, авторизациях?

Без смысла, просто надо, примите как есть.