Скачать MetaTrader 5

чем заменить GetTickCount(), для подсчёта миллисекунд? (помогите с API)

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Roma
1019
Roma  
int  ms;
//+------------------------------------------------------------------+
int init() {
    ObjectCreate("Sec", OBJ_LABEL, 0,0,0,0,0,0,0);
        ObjectSet("Sec", OBJPROP_CORNER, 0);
        ObjectSet("Sec", OBJPROP_XDISTANCE, 0);
        ObjectSet("Sec", OBJPROP_YDISTANCE, 12);
    ms=GetTickCount();
}//-------------------------------------------------------------------+
int start()
  { while(!IsStopped()) { // til del'd by hands
       Sleep(1000);                                                     // 1 sec pause
       ObjectSetText("Sec", DoubleToStr((GetTickCount()-ms)*0.001,3));  // "sec.ms"
       WindowRedraw();                                                  // refresh Label
  }    return(0);       }
//+------------------------------------------------------------------+
void deinit()
  { ObjectDelete("Sec");  WindowRedraw(); }                              // del Label, refresh

скрипт показывает обновляющееся каждую секунду время прошедшее с его старта, с миллисекундами.

то, что миллисекунды (мс) уменьшаются - естесственно, в связи с затратой времени на операции, но раз в несколько секунд они увеличиваются на 20.

непонятно с чем связано такое поведение счётчика системы, встаёт задача найти его аналог, софт какой-нибудь, и наладить с ним связь в МТ.

Файлы:
sec.ms.mq4 1 kb
anonymous
383
anonymous  

Это особенность работы GetTickCount.

Используйте QueryPerformanceFrequency/QueryPerformanceCounter или инструкцию rdtsc (для однопроцессорных систем). В обоих случаях, наверное, понадобится писать dll.

Roma
1019
Roma  
узнать бы что из себя всё это представляет и как эт использовать
Павел
6
Павел  
Когда дело доходит до миллисекунд, видно сразу - дело "серьезное"
VonDo Mix
1542
VonDo Mix  
Roma
1019
Roma  
миллисекунды же нужны
Roma
1019
Roma  
Sorento

не оч понял твой код.
что возвращает GetSystemTime() и зачем сдвигать биты?

while(!IsStopped()) {
   if(ExtHandle!=TimeLocal()%60)  // смена секунды
   { gSystemTime(b);
     ObjectSetText("ServerTime", StringConcatenate(TimeToStr(TimeLocal(),TIME_SECONDS),":")+b[6]);
     WindowRedraw();
     ExtHandle=TimeLocal()%60;
   }                }

почему-то b[6] не всегда == 0

Файлы:
time.ms.mq4 2 kb
Alexey Navoykov
4088
Alexey Navoykov  

Про GetSystemTime читайте в MSDN. Там значения хранятся в структрах из двухбайтовых слов, поэтому в MQL их естественно надо преообразовывать к 32 битам. А системный таймер конечно же нельзя использовать для точных расчётов, т.к. он даёт погрешность 16-20 мс.

Roma
1019
Roma  
Meat:

Про GetSystemTime читайте в MSDN.

я гуглил, так и не понял что возвращает функция, написано тоьлко что системное время, если в нём содержатся и дата и время до миллисекунд, то непонятно как их вывести
Alexey Navoykov
4088
Alexey Navoykov  
eddy:
я гуглил, так и не понял что возвращает функция, написано тоьлко что системное время, если в нём содержатся и дата и время до миллисекунд, то непонятно как их вывести
Так вам же Sorento показал, как их вывести.
Roma
1019
Roma  
он показал как вывести миллисекунды, часы:минуты выводились через другую функцию
1234
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий