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

 
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
 

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

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

 
узнать бы что из себя всё это представляет и как эт использовать
 
Когда дело доходит до миллисекунд, видно сразу - дело "серьезное"
 
миллисекунды же нужны
 
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
 

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

 
Meat:

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

я гуглил, так и не понял что возвращает функция, написано тоьлко что системное время, если в нём содержатся и дата и время до миллисекунд, то непонятно как их вывести
 
eddy:
я гуглил, так и не понял что возвращает функция, написано тоьлко что системное время, если в нём содержатся и дата и время до миллисекунд, то непонятно как их вывести
Так вам же Sorento показал, как их вывести.
 
он показал как вывести миллисекунды, часы:минуты выводились через другую функцию
Причина обращения: