Форум » Консультации по программированию » Управление скоростью вывода логов » Ответить

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

Genry: Автор: Meat 30.03.2013 01:53 В общем, если кого напрягает тормознутый вывод логов на экран (1 строчка в секунду), то можно заставить МТ4 выдавать эти логи быстрее, изменив штатное значение таймера. Вот как это делается: [pre]#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); }[/pre] Здесь мы задаём интервал таймера равным 100 мсек - и вуаля! Логи выводятся в 10 раз быстрее обычного :) Можно поставить и вообще нулевое значение, но в реальности таймер всё-равно не сможет обрабатываться чаще чем 20-30 мсек. Кроме того, очень малый интервал может замедлять работу терминала при интенсивной нагрузке системы. Правда степень его влияния я не замерял. Вообще конечно это недоработка разработчиков, что таймер включён постоянно и гоняется вхолостую, даже если в лог давно ничего не пишется. Особенно это касается тестера, где таймер нужен лишь в процессе тестирования. Видимо им лень было заморачиваться с динамическим управлением таймером, поэтому просто сделали долгий интервал.

Ответов - 1

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



полная версия страницы