https://cloud.mail.ru/public/5iZb/2NSAPmJem - ссылка на мою тестовую программу (с кодами и инструкцией по ее запуску). Старая ссылка удалена. При запуске этой программы дампы возникают быстро (у меня в течении 5 минут), но в произвольные моменты. Эта же программа (с dll оттранслированными для Lua 5.1) непрерывно (месяцами) без проблем работает во всех версиях QUIK < 8.5. Одна из функций данной программы, которая включена сейчас по умолчанию, это тестирование автоматического управления памятью в QLua. Особенностью теста является высокая нагрузка (1500 обращений в секунду) на управление автоматической памятью QLua в условиях многопоточности. Можете также посмотреть обсуждение по ссылке https://forum.quik.ru/forum10/topic5119/?PAGEN_1=3 , начиная с комментария № 145.
Евгений написал: Нужно ли что-то установить помимо самого квика?
3. Для того чтобы нормально работали пакеты dll, в W10(64р), в папке C:\Windows\System32 и в C:\Windows\SysWOW64 должны быть (в каждой из них) файлы: msvcp140d.dll msvcr120d.dll ucrtbased.dll vcruntime140d.dll Иначе QLua может выдавать сообщение: Не существует модуль……. Данные файлы могут быть восстановлены из архива Sys_dll_acad93f088cb2265dbf134f27e48aae058671f2f.zip скачанного по ссылке https://cloud.mail.ru/public/489u/4PD8JcfKd
Евгений написал: Не найден указанный модуль.Файл по указному в ошибке пути есть, что я делаю не правильно?
Здравствуйте.
Я у себя проверил в QUIKе 8.8.4.3 --- local sqlite3 = require("lsqlite3") ------ Подключение пакета работы с sqlite3 ----- env_Parm = sqlite3.open ("C:\\OS_Quesha 8 Lua5.3\\Sqlite\\History1M.db") env_Parm: close () message("env_Parm: close ()") --- Пакет подключился нормально. ----------------- 1. Файлы: lsqlite3.dll и sqlite3.dll нужно пересылать в папку, в которой находится info.exe. 2 Возможно, после скачивания файлов, вы не разблокировали файлы dll. Исполняемые файлы после скачивания часто блокируются системой. Разблокировку файла можно выполнить, зайдя в свойства файла (у заблокированных файлов есть соответствующий флажок).
Андрей написал: Воспроизводится в 8.5.2 и 8.6. До версии 8.5 данной проблемы не было.
----
Андрей написал: тоже падает (Critical error ACCESS_VIOLATION).
----
Евгений Петров написал: на версии 8.6.097, проблема с general protection fault с версии 8.5 никуда не исчезла! Продолжает валиться квик на рабочих lua скриптах с версии 7.27.1. Произвольно, иногда при запуске сразу, иногда через небольшое время.
-------------------------------------- Не буду утверждать стопудово, но многие ситуации в версиях QUIK >= 8.5, скорее всего, связаны с тем, что в этих версиях возникают ошибки реализации АРКОй QLua-машины 5.3.5 (отличной от нативной Lua-машины 5.3.5). Это отличие связано с тем, что QLua-машина 5.3.5 должна быть потокобезопасной, по сравнению с однопоточной Lua-машиной 5.3.5 (о причинах этого можно почитать мой комментарий № 142 по ссылке: https://forum.quik.ru/forum10/topic5119/?PAGEN_1=3). Более определенно, могу утверждать, что мой тест (многопоточный) автоматического управления памятью QLua-машины 5.3.5, для всех существующих (на дату 07.09.20) версий QUIK >= 8.5 диагностирует, в интервале 5 минут (в произвольные моменты), ее сбои (похоже, вызванные ошибками в синхронизации) и утечку памяти. Поддержке QUIK мною, начиная с 25.05.20, выслано более 40 дампов, а 15.08.20 выслан и сам тест для возможности оперативной отладки разработчиками новых версий QUIK. Для версий QUIK < 8.5 этот тест, ошибок не обнаруживает. Представьте себе, что на вашем ПК очень часто сбоит RAM (память). При этом любые ваши программы могут падать в любом месте, и можно искать в них свои ошибки до «посинения» (сам я этим не занимаюсь, до тех пор, пока не будут устранены сбои автоматического управления памятью QLua-машины 5.3.5).
<code> function getClassTicker2 (ticker) -- Функция возвращает таблицу кодов классов по тикеру инструмента local tbl = {} --- !!! Некоторые тикеры попадают в несколько классов --- ---- !! Таблица securities не отсортирована по тикерам . Поэтому полный перебор ---- for i= 0, getNumberOf("securities") - 1 do local item = getItem("securities", i) if item.code == ticker then tbl [#tbl +1] = item.class_code end end return tbl end <code>
Уточнение: ссылка дана на краткую статью, в комментариях к которой приводятся ссылки на коды, документацию и краткая инструкция по установки и запуску в QUIKе..
nikolz написал: Решение - предложение.Решить проблему можно двумя путями .Вариант1 Реализовать возможность создание в одном скрипте множество функций mainТ е реализовать механизм запуска нескольких потоков в одном скрипте
TGB написал: была послана поддержке (15.08.20) моя программа тестирования (со всеми необходимыми инструкциями) автоматической памяти QLua для возможности ее оперативного использования разработчиками для отладки новых версий.
Вопросов по установке и использование этой программы по почте я не получил. Значит все понятно. В этой программе создается очень большая тестовая нагрузка на управление автоматической памятью QLua и обсуждаемые ситуации возникают (на моем рабочем месте) в интервале 5 минут. Притом, что в QUIK версий < 8.5 эта же программа работает непрерывно месяцами. Я считаю, что для разработчиков эта программа могла бы быть полезным инструментом для разбора обсуждаемых ситуаций и мне не понятно почему до сих пор разработчики QUIK не используют его. Зачем ждать от меня новых дампов после публикации очередной версии QUIK, когда можно их получать на текущих дорабатываемых версиях и разбираться оперативно на месте? Если есть какие-то вопросы к моей программе я готов к общению, но этих вопросов от разработчиков я по почте не получаю.
В продолжение своего предыдущего комментария. На своих проектах я использую следующую инструкцию по работе с пользователями (вдруг кому-то окажется полезной).
Памятка по работе с пользователями на проектах
1. Пользователи являются ценнейшим ресурсом любого проекта, правильное управление которым существенно определяет успех проекта. Фактически это внештатные бесплатные отладчики проекта. Поэтому к ним следует относиться очень внимательно и доброжелательно. За найденные ими ошибки в проекте, их следует благодарить. К ошибкам, совершаемые ими, относиться спокойно и давать четкие разъяснения таким образом, чтобы не отбивать желания повторного обращения.
2. При работе с пользователями, как правило (через некоторое время), можно выделить следующие группы пользователей:
1) суперпользователи; эта наиболее ценная для проекта группа пользователей, хорошо разбирающаяся в проекте, предлагающая ценные решения и конструктивно взаимодействующая с поддержкой проекта по его отладке; как правило, это группа небольшая и поддержке проекта следует обращать на ее особое внимание, выделяя для общения с ней своих наиболее квалифицированных своих сотрудников, а также ключевых разработчиков проекта;
2) ключевые пользователи; это следующая, по ценности для проекта, группа пользователей, на работу с которой следует уделять повышенное внимание со стороны поддержки проекта;
3) пользователи;
4) боты и хамы; эта группа, кроме того, что засоряет каналы коммуникации, наносит имиджевый урон проекту; поэтому ее следует блокировать.
Andrey Bezrukov написал: Правильно понимаем, что Вы уже обратились к нам по почте с данной проблемой, предоставили файл дампа и Вашему обращению был присвоен номер CQ, в рамках которого выполняется разбор?Если так - просьба ожидать резолюции по данному вопросу с нашей сторону в рамках обозначенной переписки по почте.
Я ожидаю резолюции по данному вопросу с вашей стороны в рамках обозначенной переписки по почте.с 25.05.20.
Вы правильно понимаете, что первое письмо по ситуации с управлением памятью в Qlua я написал 25.05.20. С тех пор мною написано по данной теме более 22 писем (с отсылкой большого количества возникших дампов). В том числе была послана поддержке (15.08.20) моя программа тестирования (со всеми необходимыми инструкциями) автоматической памяти QLua для возможности ее оперативного использования разработчиками для отладки новых версий. ------------------------- Заголовок моего последнего письма вы можете посмотреть в почте по адресу quiksupport@arqatech.com: RE: "Новая версия (от 24.08.20 ) QUIK 8.8.4. 3 продолжает «падать» ( CQ02750791, CQ02779753, CQ02787899. CQ02802279) (CQ02809006)." ------------------------- Я считаю, что надо соблюдать определенные профессиональные этические нормы, и не поднимать лишний хайп, мешающий разработчикам, которые и так испытывают большой стресс. Но когда я получаю, после уже посланных мною более 22-х писем, многократную отписку (сильно похожую от робота) типа (текст приводится в том виде, как получен в письме): ------ Ваше письмо получено, проблема изучается. Постараемся в ближайшее время сообщить о причинах проблемы. Если после возникновения проблемы Рабочее место QUIK не запускается, или после запуска проблема воспроизводится вновь - в качестве временного решения рекомендуется выполнить следующие действия:
1. В директории, где установлен Quik, удалите все файлы с расширениями *.log и *.dat, кроме файлов: metastock.dat alerts.dat portfolio.dat scripts.datПосле чего попробуйте запустить Рабочее место QUIK.
2. Проверьте, что Вы используете актуальную версию Рабочего места Quik - она указана вверху окна на синей полосе. У Вашего брокера можно уточнить, номер актуальной версии и/или получить обновление.
Если вышеприведенные рекомендации не помогут, то это означает, что файл с настройками окон поврежден. Перенесите файл настроек окон (по умолчанию это файл info.wnd) в другую директорию и запустите программу. Если у Вас есть ранее сохранённый файл конфигураций окон - можно попробовать загрузить его. Загрузить файлы настроек можно через меню "Настройки/Загрузить настройки из файла". Если Вы не сохраняли такой файл самостоятельно - файл настройки мог быть сохранен автоматически в папке WNDSAV. --- то считаю, что я имею дело с непрофессионалами и поэтому могу выдавать комментарии во вне. Я допускаю, что в моем тесте могут быть ошибки, но сильно настораживает то, что
Цитата
TGB написал: OS_Quesha (с dll оттранслированными для Lua 5.1) непрерывно (месяцами) без проблем работает во всех версиях QUIK < 8.5. и не будем забывать, что начиная с марта 2020г..(уже 6 месяцев) появляются все новые и новые версии QUIK(8.5…, 8.6…, 8.7…, 8.8…), а их стабильности как не было так и нет. При этом, возникло много инцидентов именно с памятью этих версий.
P.S. OS_Quesha - это моя программа, в которой тестируется автоматическое управление памятью QLua.
TGB написал: начиная с марта 2020г..(уже 6 месяцев) появляются все новые и новые версии QUIK(8.5…, 8.6…, 8.7…, 8.8…), а их стабильности как не было так и нет. При этом, возникло много инцидентов именно с памятью этих версий.
Anton написал: вы просто рано или поздно ломаете стек и получаете крэш. Именно это и подтверждает ваш тест
что в версиях QUIK >= 8.5... есть проблемы с управлением автоматической памятью QLua.
Вы постоянно забываете, что
Цитата
TGB написал: При этом всегда помним, что OS_Quesha (с dll оттранслированными для Lua 5.1) непрерывно (месяцами) без проблем работает во всех версиях QUIK < 8.5.
Если желаете проверить сами выше приведенное утверждение, то могу выложить соответствующие коды для версий 8.4...
При запуске функций QLua в потоках OS_Quesha, стеки таких функций разворачиваются в отдельных, не пересекающихся между собой областях памяти. Поэтому синхронизации доступа к локальным переменным функций в различных потоках не требуется (единственное что при этом требуется - это потокобезопасность управления памятью QLua). Если по какой-то необходимости в потоках требуется синхронизация для общих модифицируемых переменных, то это делается внутри моей dll-библиотеки.
Цитата
Anton написал: Это все прекрасно, к стейту-то вы как доступ синхронизируете? Это можно сделать только той же критической секцией, которую внутренне использует квик, как вы до нее добрались?
Во внутренние структуры квик я напрямую нигде не обращаюсь. Использую исключительно то, что предоставляет QLua и его C-API. ------ Наконец, еще раз вспомним, что OS_Quesha (с dll оттранслированными для Lua 5.1) непрерывно (месяцами) без проблем работает во всех версиях QUIK < 8.5. и не будем забывать, что начиная с марта 2020г..(уже 6 месяцев) появляются все новые и новые версии QUIK(8.5…, 8.6…, 8.7…, 8.8…), а их стабильности как не было так и нет. При этом, возникло много инцидентов именно с памятью этих версий.
Anton написал: Теперь вопрос, как вы синхронизируете доступ к этому стейту из разных потоков?
Ответ из документа: 5. Полная инкапсуляция параллелизма функционирования потоков/псевдопотоков в средствах OS_Quesha, обеспечивающих эффективность (реализована специально разработанная схема синхронизации), корректность синхронизации и безопасность взаимодействия функций, вы- полняемых в разных П/П. В OS_Quesha существуют два вида, параметрически задаваемой в глобальных настойках, син- хронизации П/П: обычная, с использованием критической секции ОС, и быстрая (специально разработанная) на "защелках", без переключения потоков в случаях возникновении конфликтов синхронизации. При необходимости разработчик может использовать все средства синхрониза- ции явным образом.
При этом всегда помним, что OS_Quesha (с dll оттранслированными для Lua 5.1) непрерывно (месяцами) без проблем работает во всех версиях QUIK < 8.5.
Anton написал: Вы работаете с одним lua_State из двух разных потоков, верно я понял?
Дополнение. Кроме запускаемого шаблона-исходника TS_QUIK.lua есть документация OS_Quesha.pdf (в папке C:\OS_Quesha\OS_Quesha_files), из которой можно узнать что-то об архитектуре OS_Quesha, в том числе о том, что количество потоков, работающих в одном lua_State задается параметрически в описании схемы потоков (с указанием запускаемых в них функций и связями между ними), а также многое другое. Если вы посмотрите документацию, то возможно, найдете ответы на возникающие у вас вопросы.
Anton написал: Попытался найти, где у вас этот тестовый код зарыт, не нашел. В чем смысл такого теста остается неясным.
Общее описание. function OS_Quesha_TS (NC) - запускается циклически (в отдельном потоке) по таймерным событиям, запрашиваемым в функции set_evnt_lua ({1, CyclichkLine_evnt_TS}) с частотой ~300 гц. В этой функции запрашиваются строки в цикле (5 раз) и передаются функции function SendTS_CQ(NC) работающей в другом отдельном потоке и что-то делающей с этими строками (смотрите текст). Все это происходит в одной lua_State. При такой работе достаточно интенсивно ( как минимум 1500 обращений в секунду) нагружается система управления автоматической памятью QLua. И это происходит в разных потоках. Если потокобезопасное управлению автоматической памятью реализовано корректно, то тест выполняется до тех пор пока запущенный скрипт не будет остановлен. Иначе возникают различные ошибки, не перехватываемые в QLua.
Anton написал: Все же речь была о заинтересованных в отладке квика, а не вашей операционной системы. А для этого нужен (насколько возможно примитивный) луа-скрипт, показывающий, что гарбидж коллектор в квике работает некорректно, как вы утверждаете. Из описанного поведения пункт 2 это ТОЧНО дедлок у вас в коде, пункт 1 может быть от чего угодно, как из него следует косяк именно в коллекторе, непонятно. Попытался найти, где у вас этот тестовый код зарыт, не нашел. В чем смысл такого теста остается неясным.
Тестирование проблем синхронизации задача сложная и это подтверждается тем, что сама АРКИ, похоже, за десятилетия существования не разработала достаточно валидного теста потокобезопасного управления автоматической памятью QLua. Я сделал такой тест давно в виде утилиты в своей системе для себя (и он реализован с существенным использованием среды исполнения моей системы и я, к сожалению, не могу его изобразить в виде простенького скрипта, как предлагаете вы) . В том виде, в котором я его выложил, этот тест запускается по умолчанию и для специалиста, с моей точки зрения, этого достаточно. Я думаю разработчики QUIK смогут в нем разобраться. Если же он вам не понятен, то вы можете попробовать предложить свой простой тест. Еще один момент, который я специально отметил:
Цитата
TGB написал: Эта же программа (с dll оттранслированными для Lua 5.1) непрерывно (месяцами) без проблем работает во всех версиях QUIK < 8.5.
Anton написал: Кто хочет результата, выкладывает здесь тестовый скрипт, здесь есть достаточно заинтересованные люди, чтобы потратить время, прогнать у себя, подтвердить баг и тем самым сподвигнуть арку на подвиги, либо обнаружить косяк в самом тесте.
Для заинтересованных людей ссылка на коды теста: https://cloud.mail.ru/public/2Emr/QBCqEvATr За найденные баги в тесте буду благодарен. ---------------------------------------- Ниже приводится инструкция по запуску теста (непосредственно из письма, посланного в поддержку QUIK). ----
Новая версия (от 06.08.20) QUIK 8.8.1.5 продолжает «падать» (CQ02750791, CQ02779753, CQ02787899). Тестовая программа, вызывающая падение (с инструкцией по установке и ее запуску).
Здравствуйте!
QUIK 8.8.1.5 «падает» похожим образом, как это было в предыдущих версиях (начиная с 8.5….). Кроме того, в QUIK в мониторе ресурсов, наблюдается утечка памяти.
Для того, чтобы у вас была оперативная возможность отладки очередной версии, я высылаю не дамп, а мою тестовую программу (с кодами и инструкцией по ее запуску), в которой дампы возникают быстро (у меня в течении 5 минут), но в произвольные моменты. Эта же программа (с dll оттранслированными для Lua 5.1) непрерывно (месяцами) без проблем работает во всех версиях QUIK < 8.5. Одна из функций данной программы, которая включена сейчас по умолчанию, это тестирование автоматического управления памятью в QLua. Особенностью теста является высокая нагрузка (1500 обращений в секунду) на управление автоматической памятью QLua в условиях многопоточности.
Если потребуется, я пришлю коды этой же тестовой программы (с dll оттранслированными для Lua 5.1), нормально работающей в версиях 8… < 8.5.
------
Инструкция по установке и запуску тестовой программы.
Для установки и запуска программы надо выполнить следующее:
1) распаковать архив OS_Quesha 8_5.zip;
! После распаковки исполняемые файлы в папке «… OS_Quesha\packages» и «…OS_Quesha\packages\Файлы папки QUIK» могут оказаться заблокированными;
их необходимо разблокировать;
Файлы можно разблокировать в их свойствах.
Для быстрой разблокировки всех файлов папки:
- откройте консоль PowerShell (под Админом) и выполните в ней команду get-childitem "полный путь папки" | unblock-file, предварительно заменив содержимое кавычек полным адресом к папке с заблокированными файлами.
2) получившуюся папку OS_Quesha переслать на диск C (в корень);
3) переслать все файлы (их два) из папки C:\OS_Quesha\packages\Файлы папки QUIK в папку хранения info.exe ( на диске установки QUIK);
4) в меню QUIK <Сервисы> -> <Lua скрипты ...> добавить скрипт-шаблон "TS_QUIK.lua" из папки C:\OS_Quesha;
5) запустить добавленный скрипт (это можно делать в QUIKе без подключения к серверу); при этом появится окно диалога OS_Quesha.
-------------------------
При нормальной работе теста в поле Сообщения диалога с интервалом 5 секунд выдаются сообщения:
<@> <Дата | Время> <6.0> Тест управления памятью QLua. Количество синхронизаций = Количество
Пока значение Количество меняется (с интервалом в 5 секунд) тест выполняется без ошибок.
Ошибки теста проявляются следующим образом:
1) QUIK «падает» (иногда очень быстро) с сохранением дампа, а иногда и без сохранения;
2) Прграмма OS_Quesha зависает и Количество синхронизаций перестает меняется. Тогда про попытке завершения скрипта зависает или падает QUIK.
-----------
Если скрипт "TS_QUIK.lua" запускать многократно то, в какой-то (произвольный) момент возникает дамп QUIK. В версиях QUIK < 8.5 дампов не возникает.
Для завершения работы с OS_Quesha достаточно закрыть окно ее диалога или остановить крипт в меню QUIK.
------
Внимание! Для того чтобы нормально работали пакеты dll, в W10(64р), в папке C:\Windows\System32 и в C:\Windows\SysWOW64 должны быть (в каждой из них) файлы: msvcp140d.dll, msvcr120d.dll, ucrtbased.dll, vcruntime140d.dll
Иначе QLua может выдавать сообщение: Не существует модуль…….
TGB написал: Я понимаю, что отказаться от перевода QUIK на Lua 5.3… для ARQU практически невозможно, но, если ориентироваться на результат, то имело бы смысл «заморозить» перевод QUIK на Lua 5.3… и перенести накопленные нормально работающие фичи версий >=8.5… (в том числе длину номеров заявок = 19 ) в последнюю версию 8.4…… В противном случае, скорее всего, нас ждет длительное шоу новых версий QUIK.
По моему скромному мнению, перевод QUIK на Lua 5.3… является стратегической ошибкой ARQU, если ориентироваться на пользователя, а не на хайп.
Во-первых, функционально, с учетом архитектурно тесной интеграции Lua c языком C/C++, это, мягко говоря, сомнительный шаг, так как все, что не реализовано в Lua 5,1, по сравнению с Lua 5.3 (а это мало кому нужно), можно реализовать в языке C++. В том числе и длину номеров заявок (>= 19).
Во-второых, при переходе на Lua 5.3 для пользователя заметно меняется среда разработки в части используемых dll-библиотек. Надо ли это нормальным пользователям?
Во-третьих, для самих разработчиков QUIK возникает большой геморрой в связи с необходимостью переработки управление автоматической памятью Lua 5.3… (оно существенно отличается от того, что было в Lua 5.1) так, чтобы оно было в QLua 5.3... потокобезопасным (задача, конечно, интересная, но нетривиальная задача параллельного программирования, требующая высокой квалификации). Необходимость потокобезопасности управления автоматической памятью QLua обусловлена тем, что все служебные функции обратного вызова QLua запускаются в потоке отличном от пользовательского (с именем main), но в среде (памяти) пользователя.
Что мы имеем на текущий момент (12.08.20). Пользователи отлаживают, начиная с марта 2020г.все новые и новые версии (8.5…, 8.6…, 8.7…, 8.8…). Прошло уже 5 месяцев как нас кормят обещаниями стабильной новой версии QUIK. При запусках моего теста управления автоматической памятью во всех QLua версиях >= 8.5 в произвольные моменты времени, но в интервале 10 минут, возникают дампы ( все они пересланы мной в поддержку ARQU). Причем в QUIK версий < 8.5 проблем с управлением автоматической памятью QLua мной не обнаружено.
Пока в версии >= 8.5 не будет реализовано корректное потокобезопастное управление автоматической памятью версий QLua >= 8.5, QUIK будет нестабильным (надеюсь что разработчики QUIK это понимают).
-------
Я понимаю, что отказаться от перевода QUIK на Lua 5.3… для ARQU практически невозможно, но, если ориентироваться на результат, то имело бы смысл «заморозить» перевод QUIK на Lua 5.3… и перенести накопленные нормально работающие фичи версий >=8.5… (в том числе длину номеров заявок = 19 ) в последнюю версию 8.4…… В противном случае, скорее всего, нас ждет длительное шоу новых версий QUIK.
К сожалению, приходится наблюдать, как катастрофически падает профессионализм управленческих кадров в России, определяющих, что надо делать. ARQU вместо того, чтобы устранять ошибки версий 8.4…, улучшать функциональность, надежность и эффективность QUIK (и тут имеется широкие возможности), решила сделать маркетинговый ход и «поразить» пользователей переходом с Lua 5.1 на 5.3. Тут надо понимать, что функционально, с учетом архитектурно тесной интеграции Lua c языком C/C++, это, мягко говоря, сомнительный шаг, так как все, что не реализовано в Lua 5,1, по сравнению с Lua 5.3 (а это мало кому нужно), можно реализовать в языке C++.
Кроме того, история с многочисленными проблемами реализации собственного, потокобезопасного управления автоматической памятью QLua 5.1, была, похоже, была проигнорирована. Вместо элементарной реализации в версии 8.4…. произвольной длины номеров заявок (> 19 знаков) был выбран нелегкий путь («нормальные» герои всегда идут в обход).перехода на Lua 5.3… (в котором существенно изменилось управление автоматической памятью и которое в QLua 5.3…, в отличие от Lua 5.3…, необходимо переработать так, чтобы оно было потокобезопасным). Необходимость потокобезопасности управления автоматической памятью QLua обусловлена тем, что все служебные функции обратного вызова QLua запускаются в потоке отличном от пользовательского (с именем main), но в среде (памяти) пользователя.
Что мы имеем на текущий момент (12.08.20). Пользователи отлаживают, начиная с марта 2020г.все новые и новые версии (8.5…, 8.6…, 8.7…, 8.8…). Прошло уже 5 месяцев как нас кормят обещаниями стабильной новой версии QUIK. При запусках моего теста управления автоматической памятью во всех QLua версиях >= 8.5 в произвольные моменты времени, но в интервале 10 минут, возникают дампы ( все они пересланы мной в поддержку ARQU). Причем в QUIK версий < 8.5 проблем с управлением автоматической памятью QLua мной не обнаружено.
Пока в версии >= 8.5 не будет реализовано корректное (пусть и не самое эффективное) потокобезопастное управление автоматической памятью версий QLua >= 8.5, QUIK будет нестабильным (надеюсь что разработчики QUIK это понимают).
Как и предполагалось (смотри мой комментарий от 23.05.2020 14:30:59), поддержка ARQU до сих пор в данной теме себя не проявила. Претензий к поддержке и разработчикам QUIK нет (это подневольные люди, как и «записные» боты-энтузиасты новых версий QUIK).
К сожалению, приходится наблюдать, как катастрофически падает профессионализм управленческих кадров в России, определяющих, что надо делать. ARQU вместо того, чтобы устранять ошибки версий 8.4…, улучшать функциональность, надежность и эффективность QUIK (и тут имеется широкие возможности), решила сделать мартенгивый ход и «поразить» пользователей переходом с Lua 5.1 на 5.3. Тут надо понимать, что функционально, с учетом архитектурно тесной интеграции Lua c языком C/C++, это, мягко говоря, сомнительный шаг, так как все, что не реализовано в Lua 5,1, по сравнению с Lua 5.3 (а это мало кому нужно), можно реализовать в языке C++.
Кроме того, история с многочисленными проблемами реализации собственного, потокобезопасного управления автоматической памятью QLua 5.1, была, похоже, была проигнорирована. Вместо элементарной реализации в версии 8.4…. произвольной длины номеров заявок (> 19 знаков) был выбран нелегкий путь («нормальные» герои всегда идут в обход).перехода на Lua 5.3… (в котором существенно изменилось управление автоматической памятью и которое в QLua 5.3…, в отличие от Lua 5.3…, необходимо переработать так, чтобы оно было потокобезопасным). Необходимость потокобезопасности управления автоматической памятью QLua обусловлена тем, что все служебные функции обратного вызова QLua запускаются в потоке отличном от пользовательского (с именем main), но в среде (памяти) пользователя.
Что мы имеем на текущий момент (26.07.20). Пользователи отлаживают, начиная с марта 2020г.все новые и новые версии (8.5…, 8.6…, 8.7…, 8.8…). Прошло уже 5 месяцев как нас кормят обещаниями стабильной новой версии QUIK. При запусках моего теста управления автоматической памятью во всех QLua версиях >= 8.5 в произвольные моменты времени, но в интервале 10 минут, возникают дампы ( все они пересланы мной в поддержку ARQU). Причем в QUIK версий < 8.5 проблем с управлением автоматической памятью QLua мной не обнаружено.
Пока в версии >= 8.5 не будет реализовано корректное (пусть и не самое эффективное) потокобезопасное управление автоматической памятью версий QLua >= 8.5, QUIK будет нестабильным (надеюсь что разработчики QUIK это понимают).
Дополнение к выше приведенному ответу. QUIK не управляет потоками. Ими управляет ОС. Но в реализации QLua есть отличие от "чистого" Lua, состоящее в том,что виртуальная машина QLua реализует собственное, потокобезопасное управление автоматической памятью QLua (запрос памяти под объекты QLua, возврат памяти, сборка мусора). Это правильно, и обусловлено тем, что все служебные функции обратного вызова QLua запускаются в потоке отличном от пользовательского (с именем main), но в среде (памяти) пользователя. Тут возникает только один вопрос: насколько эффективно в QLua реализовано это управление автоматической памятью? Но главным является то, что до версии QUIK 8.5, похоже это было реализовано достаточно корректно.Начиная же с версии QUIK 8.5 (а это переход c Lua 5.1 на 5.3, в котором существенно изменилось управление автоматической памятью) и вплоть до версии 8.8.0.55 при запусках моего теста управления автоматической памятью QLua в произвольные моменты времени возникают дампы ( все они пересланы мной в поддержку ARQU). Пока в версии >= 8.5 не будет реализовано корректное (пусть и не самое эффективное) потокобезопастное управление автоматической памятью версий QLua >= 8.5, QUIK будет нестабильным (надеюсь что разработчики QUIK это понимают).
Anton написал: как она похорошела при в 8.5.2. Еще пара штрихов и будет не хуже по крайней мере старых 32-битных версий, а если обещанное выкатят в ближайшем релизе, то кое-в-чем уже лучше будет.
Anton написал: Куда этот 32-битный квик ставить-то.
32-битный квик легко ставится в W10 64р. И Microsoft будет продолжать поддерживать 32 р. приложения в 64р. Windows (у нее самой немало 32р. приложений). У меня в W10 (64р.) на одном ПК установлены QUIK 7..., 8.. и 8.5... Все работает, но только 8.5.... часто "падает" и не надо мне рассказывать как нужно искать мои ошибки (которые, конечно же случаются).
Anton написал: Чет вспомнил про луддитов. Флешмоб за процессоры, которые 15 лет как сняты с производства, и оси, поддержка которых закончилась полгода назад. Это надо было на интеле и майкрософте устраивать и сильно раньше, теперь поезд ушел уже. Что интересно, вышеименованный продукт создан в студии 2015, которая не то что на хрюшу, на семерку-то не встает. Внезапно.
Увеличение номера заявки до 19 разрядов это, конечно, прорыв в будущее .
Вообще, приходится постоянно наблюдать как производители, особенно монополисты, нередко специально «понуждают» потребителей переходить на новые продукты и это часто связано не с заботой о «прогрессе», а для «бабло срубить». Ни на что не намекаю.
А если конкретно, то в данной теме обсуждается не перенос «фич» из новой версии 8.5 в старые, а всего навсего обеспечение очень старой функциональности работы с заявками.
Похоже, поддержка QUIK в данной теме не появится. Но я на это особо и не рассчитывал. Им это все по барабану. Надо понимать, что музыку заказывает тот, кто платит, а деньги АРКА за QUIK, как правило, получает непосредственно от наших брокеров (у которых наша плата за QUIК входит в оплату за предоставляемые ими услуги). Поэтому, если кому-то хочется быть услышанным АРКОй, это надо делать, скорее всего, через своего брокера. Так будет для АРКИ доходчивее.
Anton написал: Вообще риторика "да там делов на два часа" очень знакома. Обычно такой заказчик приходит с копеечным бюджетом и потом пытается еще и с оплатой прокинуть, либо, в лучшем случае, попросить "ыщо малость доработать" (ну то есть вообще с нуля и по-другому) за тот же прайс. Ни на что не намекаю, просто наблюдение.
s_mike@rambler.ru написал: Вы поддержите фининсово, оплатите необходимую вам работу - и разработчики с удовольствием все сделают. У вас есть лишние деньги , изменяющиеся сотнями тысяч рублей или все проще поставить версию 8?
Интеллектуальная поддержка: ---- Номер заявки можно оставить строковым. В С++: Перевод строки в INT64: INT64 value = _atoi64(input); Обратный перевод: _i64toa_s(value, input, 20, 10); Дополнительные пояснения. Наверное, почти все знают, что из QLua можно обращаться к функциям, написанным на C++. И за 2-3 :) дня можно было разработчику QUIK, используя приведенные выше две строки, написать две функции, каждая из которых была бы длиной не более 6-ти строк.
Переход на QUIK 8.5..... для многих пользователей порождает проблемы связанные как с нестабильностью новой версии, так и с необходимостью перевода своих прикладных программ c Lua 5.1 на Lua 5.3. Пусть бы энтузиасты "покувыркались" бы с новыми версиями, а консерваторы занимались бы своими делами. 19-ти разрядные № заявок в старых версиях реализовать не сложно и это хорошо бы сделать. Разработчику QUIK это было бы только в плюс.
Цитата Sergey Gorokhov написал:Ничего кроме того что нужно написать функцию которая будет его дергать. ----------------------------------
TGB В С++ Перевод строки в INT64: INT64 value = _atoi64(input); Обратный перевод: _i64toa_s(value, input, 20, 10);
Дополнительные пояснения. Наверное, почти все знают, что из QLua можно обращаться к функциям, написанным на C++. И за 2-3 :) дня можно было разработчику QUIK, используя приведенные выше две строки, написать две функции, каждая из которых былабы длиной не более 6-ти строк.
Уведомление о необходимости обновления торговых терминалов в связи с изменениями на срочном рынке Московской биржи, Список проблем при работе устаревших версий QUIK после обновления торговой системы срочного рынка МБ
Anton написал: По каждому тику квику пришлось бы:1) искать строку с номером заявки в хранилище луа2) не находить ее, выделять память, пихать новую строку в хранилище луа3) дергать колбек4) убивать ссылку на строку5) через каждые несколько тиков луа придется собирать мусор.Это было бы не просто медленно, это убило бы вообще все, квик бы плелся как черепаха и зависал от каждого движения мышки.
А выше написано о чем? В самих значениях строки (таблицы) есть и строки и числа. Ну что из этого? Все это находится в управляемой памяти и под уборку мусора. Вообще, я думаю, что каждый из нас может остаться при своем мнении.
Уведомление о необходимости обновления торговых терминалов в связи с изменениями на срочном рынке Московской биржи, Список проблем при работе устаревших версий QUIK после обновления торговой системы срочного рынка МБ
Anton написал: Как и где вы посмотрели? Луа возвращает тип number для номера сделки, в alltrades.dat они лежат в виде 64-битных целых (просто поверьте). Так где вы строки увидели?
После заказа данных создайте "Таблицу обезличенных сделок". И далее запустите скрипт:
local all_trades = getItem("all_trades", 10)
message( "------------------------------"); for i, v in next, all_trades do message(type( i) .. " " .. i); end
Уведомление о необходимости обновления торговых терминалов в связи с изменениями на срочном рынке Московской биржи, Список проблем при работе устаревших версий QUIK после обновления торговой системы срочного рынка МБ
Anton написал: TGB написал:Почему нельзя сделать. чтобы номер заявки был текстовой переменной?
Так и думал, что это будет приведено. Потому что есть например OnAllTrade. По каждому тику квику пришлось бы:1) искать строку с номером заявки в хранилище луа2) не находить ее, выделять память, пихать новую строку в хранилище луа3) дергать колбек4) убивать ссылку на строку5) через каждые несколько тиков луа придется собирать мусор.Это было бы не просто медленно, это убило бы вообще все, квик бы плелся как черепаха и зависал от каждого движения мышки. И это только одно.
Я специально посмотрел записи таблицы "all_trades" в QUIK 8.5.1.18. Все поля ее записей строковые. Поэтому я не понял что вы написали в вашем сообщении. Вообще, если же спуститься на "землю", а именно, посмотреть реальную работу QUIK версий 7.27.2.1., 8.3.2.4 и 8.5.1.18, то никаких чудес быстроты функционирования последних двух относительно первой я не заметил (понятное увеличение размера кода это конечно же мелочь).
Уведомление о необходимости обновления торговых терминалов в связи с изменениями на срочном рынке Московской биржи, Список проблем при работе устаревших версий QUIK после обновления торговой системы срочного рынка МБ
TGB написал: эффективное использование ресурсов ПК (низкая нагрузка).
ай-ай, а как же тогда с этим? - пускать софтину чуть ли не в сэнд-боксе ?
неувязочка :)
хотя действительно ... зачем делать 64-битный софт в 64-битной ОС на 64-битном ЦПУ ... глупость какая-то
давай, поясни как это полностью неправильно :)
и вот это тоже до кучи
Цитата
Цитата
новичок написал: TGB написал:Поддержку 19-разрядных номеров можно было реализовать в архитектуре QUIK 7. Если, у кого-то в этом есть сомнения, то я готов изложить как это можно было сделать.
По 1-му пункту: мне долго вам объяснять, что 32-ух разррядные приложения в 64р. Windows 10 могут выполняться часто даже быстрее, чем 64 разрядные. Погуглите.
По 2-му пункту есть нормальное решение
Цитата
Sergey Denegin написал: А что никак нельзя обойтись без луа 5.3 чтобы отправлять номера заявок 19и разрядные? например из двух частей. Почему нельзя сделать. чтобы номер заявки был текствой переменной? Мне не совсем понятно, почему ради каких -то 19и значных номеров пользователи должны ставить себе новую винду? Это сверх НЕ клиентоориентированный подход, неужели руководство квика считает, что они не потеряют клиентуру?
Уведомление о необходимости обновления торговых терминалов в связи с изменениями на срочном рынке Московской биржи, Список проблем при работе устаревших версий QUIK после обновления торговой системы срочного рынка МБ
Уведомление о необходимости обновления торговых терминалов в связи с изменениями на срочном рынке Московской биржи, Список проблем при работе устаревших версий QUIK после обновления торговой системы срочного рынка МБ
Уведомление о необходимости обновления торговых терминалов в связи с изменениями на срочном рынке Московской биржи, Список проблем при работе устаревших версий QUIK после обновления торговой системы срочного рынка МБ
Вопросы к поддержке QUIK: 1) чем вызвана необходимость перевода рабочего места клиента QUIK на 64р. архитектуру (что нельзя было делать клиентам на 32р)? 2) чем вызвана необходимость перевода рабочего места клиента QUIK на Lua 5.3 (соображения, что это модно не интересны)? 3) была ли какая-то оценка проблем, которые могут возникнуть у клиентов, да и у самого разработчика?
Что мне, как пользователю рабочего места клиента QUIK, нужно: надежность, удобство, оперативность выполнения функций, наглядность, эффективное использование ресурсов ПК (низкая нагрузка). Все остальное мне, как я думаю и большинству клиентов, не интересно. Кроме того, важнейшим показателем рабочего места клиента QUIK является стабильность его архитектуры, обеспечивающая стабильность среды разработки моих прикладных программ. Нам, непосредственно работающим на фондовом рынке, за постоянное перестраивание своих программ под постоянно меняющуюся архитектуру денег не платят. Какие из перечисленных выше требований к рабочему месту трейдера нельзя было реализовать в архитектуре QUIK 7? Поддержку 19-разрядных номеров можно было реализовать в архитектуре QUIK 7. Если, у кого-то в этом есть сомнения, то я готов изложить как это можно было сделать.