Новая версия платформы MetaTrader 5 build 5100: Переход на Git и хаб разработчиков MQL5 Algo Forge, темная тема и улучшения интерфейса - страница 36

 
Forester #:

Вообще хотелось бы из массива uchar сразу получить массив любого типа.

Грубо говоря, Вы предлагаете такое (немного обобщенное).

void OnStart()
{
  int Array1[];
  MqlTick Array2[];
  
  ArraySwapMemory(Array1, Array2); // Обмен указателями на память, с учетом кратности sizeof типов.
}
 
fxsaber #:

Грубо говоря, Вы предлагаете такое (немного обобщенное).

можно своп, а можно и в одну сторону. Второй массив пока не планирую использовать.
После получения по ссылке - только размер массива надо будет подкорректировать.
 
fxsaber #:

Между выходом из OnTimer и следующем заходом в OnTimer должно пройти 100 мс, судя по коду.

Ок.

Зачем каждый раз в обработчике таймера делать EventKillTimer?

 
Slava #:

Ок.

Зачем каждый раз в обработчике таймера делать EventKillTimer?

Кнопкой Stop в панели останавливать загрузку большого списка файлов. Ранее писал
Убрать таймер не предлагайте  - нужно именно так.

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

Загрузка каждого файла начинается после небольшой паузы через OnTimer(), чтобы получить события от панели, а именно нажатие кнопки.

Ну и EventKillTimer ведь не запрещена к использованию кроме как в OnDeinit(), значит должна работать в любом количестве.
Создай свои графические панели на MQL5
Создай свои графические панели на MQL5
  • www.mql5.com
Удобство пользования MQL5-программой определяется не только её богатой функциональностью, но и продуманным графическим интерфейсом. Визуальное восприятие иногда гораздо важнее, чем быстрая и стабильная работа. Перед вами пошаговое руководство по самостоятельному созданию индикаторных панелей на основе классов Стандартной библиотеки.
 
Slava #:

Какая ошибка таймера? 5 секунд плюс 100 миллисекунд?

PS Оказывается в лог уже выводится сообщение "start timer". Следующее сообщение "OnTimer via nnn ms" примерно через 100 миллисекунд. Прямо так в представленном логе и написано. Что не так?


В логе же видно, что идёт обработка а потом ещё такой же по времени лаг и дальше он увеличивается:

*

 
Forester #:
Кнопкой Stop в панели останавливать загрузку большого списка файлов. Ранее писал Загрузка каждого файла начинается после небольшой паузы через OnTimer(), чтобы получить события от панели, а именно нажатие кнопки.

Ну и EventKillTimer ведь не запрещена к использованию кроме как в OnDeinit(), значит должна работать в любом количестве.
В браузерах есть SetInterval() который вызывает код с заданным интервалом - это то, что у вас сейчас есть.

А еще есть SetTimer() для одноразового выполнения через паузу. Вот такой конструкцией через EventKillTimer и получаем одноразовые выполнения через ваш имеющийся функционал.
 
Forester #:

100мс только после первого запуска таймера - при последующих уже дополнительные задержки, равные времени от предыдущего срабатывания Ontimer().

Я не знаю, как это у вас получается. Я запустил Ваш код.

//+------------------------------------------------------------------+
//|                                                    TestTimer.mq5 |
//|                                  Copyright 2025, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2025, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"

input bool quick  = false;
ulong mcs;
int   i=1;
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
void OnInit()
  {
   downloads();
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   EventKillTimer();
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTimer()
  {
   Print("OnTimer via ", (GetMicrosecondCount()-mcs)/1000," ms");
   EventKillTimer();
   downloads();
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void downloads()
  {
   if(quick)
     {
      Print("start timer quick");  //быстрая функция
     }
   else //почему то тормозит перед запуском следущего OnTimer на время от предыдущго вызова
     {
      mcs = GetMicrosecondCount();
      Sleep(i*1000); //медленные расчеты
      Print(i,") Work time: ", (GetMicrosecondCount()-mcs)/1000," ms");
      Print("start timer");
     }
   i++;
   if(i==10)
     {
      Print("Finish!!!");
      EventKillTimer();
      return;
     }
   mcs = GetMicrosecondCount();
   EventSetMillisecondTimer(100);
  }
//+------------------------------------------------------------------+

Вот результат

2025.06.12 15:19:33.885 TestTimer (EURUSD,H1)   1) Work time: 1005 ms
2025.06.12 15:19:33.885 TestTimer (EURUSD,H1)   start timer
2025.06.12 15:19:33.987 TestTimer (EURUSD,H1)   OnTimer via 101 ms
2025.06.12 15:19:35.990 TestTimer (EURUSD,H1)   2) Work time: 2003 ms
2025.06.12 15:19:35.990 TestTimer (EURUSD,H1)   start timer
2025.06.12 15:19:36.103 TestTimer (EURUSD,H1)   OnTimer via 112 ms
2025.06.12 15:19:39.109 TestTimer (EURUSD,H1)   3) Work time: 3006 ms
2025.06.12 15:19:39.109 TestTimer (EURUSD,H1)   start timer
2025.06.12 15:19:39.220 TestTimer (EURUSD,H1)   OnTimer via 110 ms
2025.06.12 15:19:43.243 TestTimer (EURUSD,H1)   4) Work time: 4023 ms
2025.06.12 15:19:43.243 TestTimer (EURUSD,H1)   start timer
2025.06.12 15:19:43.352 TestTimer (EURUSD,H1)   OnTimer via 109 ms
2025.06.12 15:19:48.355 TestTimer (EURUSD,H1)   5) Work time: 5003 ms
2025.06.12 15:19:48.355 TestTimer (EURUSD,H1)   start timer
2025.06.12 15:19:48.461 TestTimer (EURUSD,H1)   OnTimer via 106 ms
2025.06.12 15:19:54.456 TestTimer (EURUSD,H1)   6) Work time: 5994 ms
2025.06.12 15:19:54.456 TestTimer (EURUSD,H1)   start timer
2025.06.12 15:19:54.570 TestTimer (EURUSD,H1)   OnTimer via 114 ms
2025.06.12 15:20:01.576 TestTimer (EURUSD,H1)   7) Work time: 7006 ms
2025.06.12 15:20:01.576 TestTimer (EURUSD,H1)   start timer
2025.06.12 15:20:01.688 TestTimer (EURUSD,H1)   OnTimer via 111 ms
2025.06.12 15:20:09.685 TestTimer (EURUSD,H1)   8) Work time: 7997 ms
2025.06.12 15:20:09.685 TestTimer (EURUSD,H1)   start timer
2025.06.12 15:20:09.803 TestTimer (EURUSD,H1)   OnTimer via 118 ms
2025.06.12 15:20:18.805 TestTimer (EURUSD,H1)   9) Work time: 9002 ms
2025.06.12 15:20:18.805 TestTimer (EURUSD,H1)   start timer
2025.06.12 15:20:18.805 TestTimer (EURUSD,H1)   Finish!!!

Билд 5107

2025.06.12 15:13:10.666 Terminal        MetaTrader 5 x64 build 5107 started for MetaQuotes Ltd.
2025.06.12 15:13:10.666 Terminal        Windows 11 build 26100, 32 x AMD Ryzen 9 7950X 16-Core, AVX2, 111 / 127 Gb memory, 332 / 537 Gb disk, UAC, GMT+2
 
Slava #:
0:09.685 TestTimer (EURUSD,H1)   start timer 2025.06.12 15:20:09.803 Te

Скопировал вашу версию кода. По прежнему лишние задержки.

2025.06.12 15:26:38.329    1) Work time: 995 ms
2025.06.12 15:26:38.329    start timer
2025.06.12 15:26:38.435    OnTimer via 105 ms
2025.06.12 15:26:40.438    2) Work time: 2002 ms
2025.06.12 15:26:40.438    start timer
2025.06.12 15:26:42.535    OnTimer via 2096 ms
2025.06.12 15:26:45.540    3) Work time: 3004 ms
2025.06.12 15:26:45.540    start timer
2025.06.12 15:26:48.635    OnTimer via 3094 ms
....

Билд 5106
Проверка последней беты показывает
2025.06.12 15:27:06.363    LiveUpdate    you are using the latest version

Как получить 5107 - может там исправлено?
И еще у меня Windows 7

 
Forester #:

Скопировал вашу версию кода. По прежнему лишние задержки.

Билд 5106
Проверка последней беты показывает
2025.06.12 15:27:06.363    LiveUpdate    you are using the latest version

Как получить 5107 - может там исправлено?
И еще у меня Windows 7

Это - Ваша версия кода, я только стилизатор применил.

Таймер много лет не трогали.

Сделайте несколько попыток для получения 5107
 

Обновил до 5107 - лишние задержки по прежнему есть

2025.06.12 15:35:46.856    1) Work time: 994 ms
2025.06.12 15:35:46.856    start timer
2025.06.12 15:35:46.963    OnTimer via 106 ms
2025.06.12 15:35:48.966    2) Work time: 2002 ms
2025.06.12 15:35:48.966    start timer
2025.06.12 15:35:51.063    OnTimer via 2096 ms
2025.06.12 15:35:54.061    3) Work time: 2997 ms
2025.06.12 15:35:54.061    start timer
2025.06.12 15:35:57.172    OnTimer via 3110 ms

Значит из за Win7.