Оптимальное быстродействие - страница 3

 
PapaYozh:

https://www.mql5.com/ru/docs/runtime/running

Выполнение программ я смотрел и раньше, но там о сервисах только общая информация. А если набрать в поиске "сервисы", то там появляются ссылки на любые источники (например, такие как Сервис сигналы), но нет ссылки, где отдельно рассказано о сервисах, с примерами, как информация обычно приводится в документации...

 

Информация есть, но ничего важного нет и не требуется. Это просто скрипт с автозапуском. Пишите как скрипт (без доступа к чарту). Чтобы работать с отладчиком, запускайте как скрипт, а не сервис.

В цикле ждёте нового задания (из выбранного входа), обрабатываете и выводите результат на выбранный выход. Для простоты - через файлы. Разруливайте общий доступ к ресурсам (к файлам в данном случае).

 
Edgar Akhmadeev:

Информация есть, но ничего важного нет и не требуется. Это просто скрипт с автозапуском. Пишите как скрипт (без доступа к чарту). Чтобы работать с отладчиком, запускайте как скрипт, а не сервис.

В цикле ждёте нового задания (из выбранного входа), обрабатываете и выводите результат на выбранный выход. Для простоты - через файлы. Разруливайте общий доступ к ресурсам (к файлам в данном случае).

Прочитал на форуме, что работает только OnStart. Не OnTimer, не OnTick, не работают. Получается, есть единственный вариант, это зациклить обработку с помощью while?...

Еще, хочу разобраться, как лучше передавать/отправлять данные? С помощью файлов, это не очень хороший вариант, так как придётся постоянно писать данные на жесткий диск. При больших объемах данных, а также большом количестве запущенных процессов, это может превратиться в катастрофу... Плюс, преждевременный износ жесткого диска, также возможен...

Еще, сервис запускается вручную, с помощью команды Добавить сервис, на сколько я понял... Но хорошо бы если бы была возможность запускать его программно. Тогда, не было бы никаких препятствий многопоточности.
 
Mihail Matkovskij:

Прочитал на форуме, что работает только OnStart. Не OnTimer, не OnTick, не работают.

Edgar Akhmadeev:

Это просто скрипт


Mihail Matkovskij:

Получается, есть единственный вариант, это зациклить обработку с помощью while?...

Edgar Akhmadeev:

В цикле ждёте нового задания


Mihail Matkovskij:

Еще, хочу разобраться, как лучше передавать/отправлять данные? С помощью файлов, это не очень хороший вариант, так как придётся постоянно писать данные на жесткий диск. При больших объемах данных, а также большом количестве запущенных процессов, это может превратиться в катастрофу... Плюс, преждевременный износ жесткого диска, также возможен...

1) Если это задача оптимизации, мастер даёт большой пакет заданий, и это надолго. Не будет большой нагрузки на диск.

2) Для начала, чтобы не плясать одновременно на двух граблях, освойте через файлы. С другими способами обмена - отдельная тема. Освоите на следующем этапе.


Mihail Matkovskij:

Еще, сервис запускается вручную, с помощью команды Добавить сервис, на сколько я понял... Но хорошо бы если бы была возможность запускать его программно. Тогда, не было бы никаких препятствий многопоточности.

Вы как будто невнимательно читаете сообщения. Сервис запускается автоматически с запуском терминала. В этом его суть. Поэтому сервисы готовы к Вашей многопоточности до остановки кнопкой или по ошибке.

Если они нужны часто, пусть работают. Между проверками наличия заданий пусть спят недолго. Много процессора не скушают. Сами убедитесь.

Если долго не нужны, остановите.

А то замените на скрипты или экспертов и запускайте автоматом. Ваш выбор.

 

Много вопросов были просто риторическими, для уточнения. Такие ответы, как "Это просто скрипт" и "В цикле ждёте нового задания" мне и так понятны. Просто хотел уточнить как работает обработчик OnStart в службах (оказалось, в точности, как в скрипте). И он будет ждать команд только в том случае, если методы их получения зациклить. В остальных случаях  OnStart просто отработает и всё, на сколько я понял. При чём, будет ли при этом оставаться работающей служба или завершит свою работу, не очень понятно... Если провести полную аналогию со скриптом, как Вы выше заметили, то, получается, что служба завершит работу...

Edgar Akhmadeev:



1) Если это задача оптимизации, мастер даёт большой пакет заданий, и это надолго. Не будет большой нагрузки на диск.

2) Для начала, чтобы не плясать одновременно на двух граблях, освойте через файлы. С другими способами обмена - отдельная тема. Освоите на следующем этапе.

Жёсткий диск не рассчитан на такое обращение с ним! Поэтому, мне нужны способы здорового человека!...

Edgar Akhmadeev:


Если они нужны часто, пусть работают. Между проверками наличия заданий пусть спят недолго. Много процессора не скушают. Сами убедитесь.

Если долго не нужны, остановите.

А то замените на скрипты или экспертов и запускайте автоматом. Ваш выбор.

Проблема в том, что мне придется проводить целый инструктаж тем, кто будет пользоваться моей программой... :) Поэтому, нужно чтобы всё создавалось и запускалось автоматически. От пользователя требуется только нажать на кнопку. "Нажми на кнопку, получишь результат..." :) Поэтому для создания потоков мне подойдут скрипты или эксперты. Но для них нужно создавать чарты... Это проблема, хоть и не очень существенная... Правда, я не помню, можно ли создавать чарты программно!...

 
Mihail Matkovskij:

Много вопросов были просто риторическими, для уточнения. Такие ответы, как "Это просто скрипт" и "В цикле ждёте нового задания" мне и так понятны. Просто хотел уточнить как работает обработчик OnStart в службах (оказалось, в точности, как в скрипте). И он будет ждать команд только в том случае, если методы их получения зациклить. В остальных случаях  OnStart просто отработает и всё, на сколько я понял. При чём, будет ли при этом оставаться работающей служба или завершит свою работу, не очень понятно... Если провести полную аналогию со скриптом, как Вы выше заметили, то, получается, что служба завершит работу...

Жёсткий диск не рассчитан на такое обращение с ним! Поэтому, мне нужны способы здорового человека!...

Проблема в том, что мне придется проводить целый инструктаж тем, кто будет пользоваться моей программой... :) Поэтому, нужно чтобы всё создавалось и запускалось автоматически. От пользователя требуется только нажать на кнопку. "Нажми на кнопку, получишь результат..." :) Поэтому для создания потоков мне подойдут скрипты или эксперты. Но для них нужно создавать чарты... Это проблема, хоть и не очень существенная... Правда, я не помню, можно ли создавать чарты программно!...

не такой уж он и жёсткий и не обязательно его насиловать ради пары мегабайт :-)

RAM-диск прикрутить в Files/RAM и всё делов. ОБмен данными через него, привычными интерфейсами и с непривычной скоростью..

 
Mihail Matkovskij:

Много вопросов были просто риторическими, для уточнения. Такие ответы, как "Это просто скрипт" и "В цикле ждёте нового задания" мне и так понятны. Просто хотел уточнить как работает обработчик OnStart в службах (оказалось, в точности, как в скрипте). И он будет ждать команд только в том случае, если методы их получения зациклить. В остальных случаях  OnStart просто отработает и всё, на сколько я понял. При чём, будет ли при этом оставаться работающей служба или завершит свою работу, не очень понятно... Если провести полную аналогию со скриптом, как Вы выше заметили, то, получается, что служба завершит работу...

Лучший совет тем, кто желает начать: Начните!

 
Maxim Kuznetsov:

не такой уж он и жёсткий и не обязательно его насиловать ради пары мегабайт :-)

RAM-диск прикрутить в Files/RAM и всё делов. ОБмен данными через него, привычными интерфейсами и с непривычной скоростью..

Решение хорошее. Но его не сделать средствами MQL. Глобальные переменные также пишут на диск (почти тоже что и использование файлов). Остаются графические объекты OBJ_BITMAP и OBJ_BITMAP_LABEL. Можно осуществлять обмен данными с помощью целого массива байтов, которые находятся в ОЗУ. И не нужны сложности с созданием RAM-диска... Пожалуй, этот вариант мне подходит наилучшим образом.

Еще, Едгар мне советовал использование ресурсов... Но как можно обратиться напрямую к ресурсу запущенного эксперта из другого эксперта или скрипта?

Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Типы объектов
Документация по MQL5: Константы, перечисления и структуры / Константы объектов / Типы объектов
  • www.mql5.com
Типы объектов - Константы объектов - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Mihail Matkovskij:

Проблема в том, что мне придется проводить целый инструктаж тем, кто будет пользоваться моей программой... :) Поэтому, нужно чтобы всё создавалось и запускалось автоматически. От пользователя требуется только нажать на кнопку. "Нажми на кнопку, получишь результат..." :) Поэтому для создания потоков мне подойдут скрипты или эксперты. Но для них нужно создавать чарты... Это проблема, хоть и не очень существенная... Правда, я не помню, можно ли создавать чарты программно!...

Выше я давал ссылку на готовое решение.

 
Stanislav Korotky:

Выше я давал ссылку на готовое решение.

Спасибо! Изучил материал. Если появятся вопросы, то задам их в обсуждении статьи.

Обсуждение статьи "Многопоточный асинхронный WebRequest на MQL5 своими руками"
Обсуждение статьи "Многопоточный асинхронный WebRequest на MQL5 своими руками"
  • 2018.11.08
  • www.mql5.com
Опубликована статья Многопоточный асинхронный WebRequest на MQL5 своими руками: Автор: Stanislav Korotky...