Управление скоростью вывода логов

 

В общем, если кого напрягает тормознутый вывод логов на экран (1 строчка в секунду), то можно заставить МТ4 выдавать эти логи быстрее, изменив штатное значение таймера. Вот как это делается:

#import "user32.dll"
  int  GetAncestor(int hwnd, int gaFlags);
  int  SetTimer(int hWnd, int nIDEvent, int uElapse, int lpTimerFunc);
  int  GetDlgItem(int hDlg, int nIDDlgItem);
 
 
void SetLogTimer(int msec)
{
  int hMT4 = GetAncestor(WindowHandle(Symbol(),Period()), 2);  // GA_ROOT
  int hTerminal0 = GetDlgItem(hMT4, 0xE81E);
  int hTerminal  = GetDlgItem(hTerminal0, 0x51);
  int hTester    = GetDlgItem(hTerminal0, 0x53);
  SetTimer(hTerminal, 0x3E7, msec, 0);  // таймер для лога журнала и экспертов
  SetTimer(hTester, 0x3E7, msec, 0);    // таймер для лога тестера
} 
 
 
int init()
{
  SetLogTimer(100);
}


 Здесь мы задаём интервал таймера равным 100 мсек - и вуаля! Логи выводятся в 10 раз быстрее обычного :)

Можно поставить и вообще нулевое значение, но в реальности таймер всё-равно не сможет обрабатываться чаще чем 20-30 мсек.

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

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

 
полезно, спс
 
 Спасибо!  А то задолбало по пол-минуты каждый раз ждать.!)
Причина обращения: