Известно, что колбеки в QLUA блокируют основной поток терминала QUIK.
Решение изначально было спорное, но в ту пору попытка переубедить разработчиков в их ошибке была безрезультатна.
-----------------------
Как мера, якобы устраняющая данную проблему, по задумке разработчика QLUA был введен еще один поток для функции main.
-----------------------
Поэтому Всем известна рекомендация разработчиков делать минимальные вычисления в колбеках и выполнять основные расчеты в функции main.
==================
Однако, это кажущееся ускорение вычислений легко можно свести к нулю, что уверен и делается большинством программистов роботов на QLUA.
===================
Рассказываю в чем фишка.
================
Экспериментируя с реализацией пула потоков, обнаружил, что потоки, использующие область глобальных переменных,
а также функция main на самом деле не работают независимо от колбеков, а тоже останавливаются на время их работы.
Очевидно, это связано с блокировкой области глобальных переменных при работе колбеков.
====================
В итоге, если у Вас в функции main используются глобальные переменные, а это, в том числе , источники данных,
то параллельная работа функции main не получится.
------------------
В итоге поток Main будет останавливаться вместе с основным потоком терминала и Ваш робот на QLUA будет фактически
работать в одном потоке с остановками на каждом колбеке.
==========================
Прикольно, но есть решение, которое позволяет:
во-первых, полностью убрать из QLUA эти монстры-колбеки, останавливающие основной поток и функцию main в указанных выше случаях.
во-вторых, не останавливать основной поток вообще для передачи данных в другие потоки, которых может быть любое число.
=========================
я сомневаюсь, что разработчики когда-нибудь решат это сделать, так как им платят брокеры, а брокерам это до лампочки.
----------------------------
Поэтому могу лишь рекомендовать писателям роботов свести к минимуму использование глобальных переменных в функции main.
Решение изначально было спорное, но в ту пору попытка переубедить разработчиков в их ошибке была безрезультатна.
-----------------------
Как мера, якобы устраняющая данную проблему, по задумке разработчика QLUA был введен еще один поток для функции main.
-----------------------
Поэтому Всем известна рекомендация разработчиков делать минимальные вычисления в колбеках и выполнять основные расчеты в функции main.
==================
Однако, это кажущееся ускорение вычислений легко можно свести к нулю, что уверен и делается большинством программистов роботов на QLUA.
===================
Рассказываю в чем фишка.
================
Экспериментируя с реализацией пула потоков, обнаружил, что потоки, использующие область глобальных переменных,
а также функция main на самом деле не работают независимо от колбеков, а тоже останавливаются на время их работы.
Очевидно, это связано с блокировкой области глобальных переменных при работе колбеков.
====================
В итоге, если у Вас в функции main используются глобальные переменные, а это, в том числе , источники данных,
то параллельная работа функции main не получится.
------------------
В итоге поток Main будет останавливаться вместе с основным потоком терминала и Ваш робот на QLUA будет фактически
работать в одном потоке с остановками на каждом колбеке.
==========================
Прикольно, но есть решение, которое позволяет:
во-первых, полностью убрать из QLUA эти монстры-колбеки, останавливающие основной поток и функцию main в указанных выше случаях.
во-вторых, не останавливать основной поток вообще для передачи данных в другие потоки, которых может быть любое число.
=========================
я сомневаюсь, что разработчики когда-нибудь решат это сделать, так как им платят брокеры, а брокерам это до лампочки.
----------------------------
Поэтому могу лишь рекомендовать писателям роботов свести к минимуму использование глобальных переменных в функции main.