Автор:
Meat 30.03.2013 01:53
В общем, если кого напрягает тормознутый вывод логов на экран (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 мсек.
Кроме того, очень малый интервал может замедлять работу терминала при интенсивной нагрузке системы. Правда степень его влияния я не замерял. Вообще конечно это недоработка разработчиков, что таймер включён постоянно и гоняется вхолостую, даже если в лог давно ничего не пишется. Особенно это касается тестера, где таймер нужен лишь в процессе тестирования.
Видимо им лень было заморачиваться с динамическим управлением таймером, поэтому просто сделали долгий интервал.