АвторСообщение
постоянный участник




Сообщение: 2199
Зарегистрирован: 04.03.13
Откуда: Москва
Репутация: 3
ссылка на сообщение  Отправлено: 17.01.16 16:57. Заголовок: Управление скоростью вывода логов


Автор: 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 мсек.

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

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

С уважением! Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 1 [только новые]







Сообщение: 2012
Зарегистрирован: 03.03.13
Откуда: Украина, Днепродзержинск
Репутация: 3
ссылка на сообщение  Отправлено: 17.01.16 20:52. Заголовок: Genry пишет: можно ..


Genry пишет:

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


Прикольно Правда это, к сожалению, хак терминала, который со временем перестанет работать. Для этого разработчикам понадобиться лишь поменять идентификаторы управляющих элементов (E81E, 51, 53).

Спасибо: 1 
ПрофильЦитата Ответить
Ответ:
1 2 3 4 5 6 7 8 9
большой шрифт малый шрифт надстрочный подстрочный заголовок большой заголовок видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки моноширинный шрифт моноширинный шрифт горизонтальная линия отступ точка LI бегущая строка оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  2 час. Хитов сегодня: 5
Права: смайлы да, картинки да, шрифты да, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет