Можно ли одним скриптом луа запустить другой.?

Страницы: 1
RSS
Можно ли одним скриптом луа запустить другой.?
 
Можно ли одним скриптом луа запустить другой.? Пример идет скальпинг, и есть таблица визуализации итогов. Нужно, что бы скальпинг жил своей быстрой жизнью, а таблица своей медленной (дабы не тормозить процесс) . Можно за пустить два разных скрипта,....  Но можно ли сделать из одного (один скрипт загружает другой) ?
 
Цитата
Igor Golovin написал:
Можно ли одним скриптом луа запустить другой.? Пример идет скальпинг, и есть таблица визуализации итогов. Нужно, что бы скальпинг жил своей быстрой жизнью, а таблица своей медленной (дабы не тормозить процесс) . Можно за пустить два разных скрипта,....  Но можно ли сделать из одного (один скрипт загружает другой) ?
нельзя.

можно запустить 2 скрипта заранее. Первый работает, а второй крутится вхолостую иоемурсы не кушает. А нужный момент первый создаёт сигнал второму, что пора просыпаться. Сигналом может быть все что угодно - мьютекс, memorymappedfile и так далее. В простейшем случае файл.
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
Цитата
Igor Golovin написал:
Можно ли одним скриптом луа запустить другой.? Пример идет скальпинг, и есть таблица визуализации итогов. Нужно, что бы скальпинг жил своей быстрой жизнью, а таблица своей медленной (дабы не тормозить процесс) . Можно за пустить два разных скрипта,....  Но можно ли сделать из одного (один скрипт загружает другой) ?
Скрипты Lua в Quik работают в контексте двух потоков, один поток это поток самого Quik в контексте которого вызываются функции OnTransReply, OnOrder, OnTrade и др., а второй поток это поток функции main. Соответственно, вы можете поместить быструю часть своей логики в вызовы OnTransReply, OnOrder, OnTrade и др., а медленную часть визуализации таблицы в main. Наверно будет как раз то, что вы хотите.

Если же хотите больше потоков, то можете попробовать использовать дополнительные библиотеки для реализации многопоточности, на подобие LuaLanes. Сам Lua на уровне языка не поддерживает многопоточность.
 
Цитата
s_mike@rambler.ru написал:
А нужный момент первый создаёт сигнал второму, что пора просыпаться. Сигналом может быть все что угодно - мьютекс, memorymappedfile и так далее. В простейшем случае файл.
Не могли бы поподробнее, как создать такой файл? Может, подскажете, где посмотреть пример?
 
Интересно...
Наткнулась сейчас на функцию dofile. Ну и добавила в QUIK 2 скрипта:
1:
Код
dofile("Script_2.lua")
2:
Код
message("Script_2 запущен.")
При запуске первого появилось сообщение из второго.
Как это? Или почему нельзя использовать для решения задачи этой темы? Потоки там перенимаются что ли?

P.S. Тяжко непрограммеру понять, что что-то не работает, если оно работает...
 
Вопрос выше снят.
 
Цитата
s_mike@rambler.ru написал:
Сигналом может быть все что угодно - мьютекс, memorymappedfile и так далее. В простейшем случае файл.

Подскажите, пожалуйста, как в Lua проще всего получить доступ к методам классов Mutex и MemoryMappedFile не создавая собственного внешнего кода на C (dll)?
Есть ли где-то уже готовые lua модули (библиотеки), предоставляющие интерфейс этих классов?
Годится ли для получения доступа к подобным классам библиотека "LuaInterface"? Или такое решение будет слишком медленно работать?
 
Не могу сказать вот так сходу. Мне было проще написать на си соответствующие функции и добавить их в библиотеку, чем искать готовые библиотеки и разбираться с ними.
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
Зачем вообще заморачиваться с автозапуском второго скрипта, если можно его запустить вручную? Я могу понять интерес, если бы это реализовывалось парой вызовов стандартными Lua-функциями, но нагромождать кучу сторонних библиотек ради, по сути, одной строки кода - это, на мой взгляд, чересчур.
Если уж очень нужно, чтобы второй скрипт работал в отдельном потоке со своей ВМ, модифицируйте его под ручной запуск стандартной процедурой в терминале и все.
 
Цитата
Andrei2016 написал:
Зачем вообще заморачиваться...
Заморачиваться с запуском одного скрипта из другого, наверное, действительно не стоит.
Вопрос был для решения другой задачи: как позволить скриптам обмениваться информацией. Хотя и здесь можно так решить: все скрипты свалить в одну кучу (в один скрипт), решающий в параллельных потоках различные задачи с разными инструментами. Либо пусть каждый из скриптов занимается одними и теми же вычислениями (общими для них), расходуя впустую ресурсы компьютера.

Но вот такую задачу, к сожалению, разработчики QUIK, похоже, сознательно не хотят позволить решать обычными средствами QLua: Нужно построить индикатор, учитывающий события, возможно, происходившие на меньшем таймфрейме, чем таймфрейм окна диаграммы, либо нужно построить индикатор на фиксированном таймфрейме, не зависящем от случайного изменения пользователем таймфрейма окна диаграммы.
Задача решалась бы элементарно, если бы для скрипта индикатора было бы доступно получение альтернативного источника данных через функцию CreateDataSource, пускай даже в усеченном варианте, т. е. без возможности установки SetUpdateCallback.
Единственный видимый мною выход - это запустить обычный скрипт, который закажет данные в необходимом таймфрейме через CreateDataSource и выложит их в "открытый доступ" для скриптов индикаторов.
Как это организовать? Один из вариантов - через MemoryMappedFile.
 
Цитата
Алексей написал:
Mutex и MemoryMappedFile не создавая собственного внешнего кода на C (dll)?
Мутексы есть в w32.dll, но там нет memory-mapped файлов.
Поэтому, наверно проще всего через LuaIPC, там всё есть.
Страницы: 1
Читают тему
Наверх