Добрый день,
Вопрос к разработчикам
В документации на библиотеку QLua заявлено, что
os.sysdate() возвращает системное время с точность до микросекунды.
------------------------
Это означает, как я понимаю, что если я получу с помощью этой функции время в двух точках скрипта, то разница даст мне время исполнения этого участка с точностью до микросекунды.
------------------
Я написал такой тест:
В котором я замеряю системное время в колбеке on Param в строке
и передаю его в функцию main
в функции main я снова получаю системное время в строках
вычисляю разность этих показаний в строке
и все три значения вывожу в лог файл, который покажу ниже.
----------------------
кроме того, для сравнения я делаю тоже самое на основе собственной функции времени а также своего таймера который реализован на высокоточном таймере процессора. Но это так, чтобы показать, что действительность не такая, как показывает ваша функция.
и вот результат :
На основе Вашей функции разность показаний равна НУЛЮ.
Мои функции показывают разность от 63 до 24 мкс, что более соответствует реальному процессу,
так как процессор у меня далеко не квантовый.
--------------------
Вопрос:
Что не так с вашей функцией os.sysdate() ?
Вопрос к разработчикам
В документации на библиотеку QLua заявлено, что
os.sysdate() возвращает системное время с точность до микросекунды.
------------------------
Это означает, как я понимаю, что если я получу с помощью этой функции время в двух точках скрипта, то разница даст мне время исполнения этого участка с точностью до микросекунды.
------------------
Я написал такой тест:
Код |
---|
paths = "D:/nkarray/" package.cpath =paths.."?.dll"; require "nkarray" event=nkevent.Create("event"); --------------------- name="bot"; -- имя робота path = "D:/QUIK_SCRIPT/nk_bot/" --папка где разместим лог файл Log=io.open(path..name..".log","w") -- создаем лог файл для записи ------------ _N=0; _tN={}; ---------------------- function main() ----------------------- while fconnect do if getInfoParam("SERVERTIME") then fconnect=2; end ------------------------------ while fconnect==2 do w=nkevent.wait(event); --ждем события while _N>0 do t=_tN[_N]; _N=_N-1 ---------------------- tim2=0.1*nklib.stopA(); T=os.sysdate(); local _,_,_,t3=nkvm.D(); --HMS,YMD,dHMS,dt,ns t1=60.*(60.*T.hour+T.min)+T.sec+0.001*(T.ms+0.001*T.mcs); local x1=1000000.*(t1-t[1])//1; local x2=1000000.*(t3-t[2])//1; Log:write("os.sysdate OnParam(сек)="..t[1]..", os.sysdate main(сек)="..t1..",разность 1(мкс)=="..(t1-t[1]).."\n");Log:flush(); Log:write("nkvm.D OnParam(мкс)="..t[2]..", nkvm.D main(мкс)="..t3..", разность 2(мкс)="..(t3-t[2]).."\n");Log:flush(); Log:write("разность 3 по высокоточному таймеру OC(мкс)="..tim2.."\n\n");Log:flush(); end end end end ---------------------------- function OnInit(pfile) fconnect=isConnected(); end ---------------- function OnParam(c,s) local T=os.sysdate(); local tim=60.*(60.*T.hour+T.min)+T.sec+0.001*(T.ms+0.001*T.mcs) nklib.startA(); local _,_,_,tim1=nkvm.D(); _N=_N+1; _tN[_N]={tim,tim1}; nkevent.Set(event); end |
Код |
---|
local T=os.sysdate(); local tim=60.*(60.*T.hour+T.min)+T.sec+0.001*(T.ms+0.001*T.mcs) |
в функции main я снова получаю системное время в строках
Код |
---|
T=os.sysdate(); t1=60.*(60.*T.hour+T.min)+T.sec+0.001*(T.ms+0.001*T.mcs); |
Код |
---|
local x1=1000000.*(t1-t[1])//1; |
----------------------
кроме того, для сравнения я делаю тоже самое на основе собственной функции времени а также своего таймера который реализован на высокоточном таймере процессора. Но это так, чтобы показать, что действительность не такая, как показывает ваша функция.
и вот результат :
Код |
---|
os.sysdate OnParam(сек)=78115.93613, os.sysdate main(сек)=78115.93613,разность 1(мкс)==0.0 nkvm.D OnParam(мкс)=78114968.3296, nkvm.D main(мкс)=78114968.3932, разность 2(мкс)=0.063599988818169 разность 3 по высокоточному таймеру OC(мкс)=59.8 os.sysdate OnParam(сек)=78115.998828, os.sysdate main(сек)=78115.998828,разность 1(мкс)==0.0 nkvm.D OnParam(мкс)=78114999.9583, nkvm.D main(мкс)=78115000.0045, разность 2(мкс)=0.046200007200241 разность 3 по высокоточному таймеру OC(мкс)=30.3 os.sysdate OnParam(сек)=78115.870038, os.sysdate main(сек)=78115.870038,разность 1(мкс)==0.0 nkvm.D OnParam(мкс)=78115435.1791, nkvm.D main(мкс)=78115435.2126, разность 2(мкс)=0.033499985933304 разность 3 по высокоточному таймеру OC(мкс)=24.3 |
Мои функции показывают разность от 63 до 24 мкс, что более соответствует реальному процессу,
так как процессор у меня далеко не квантовый.
--------------------
Вопрос:
Что не так с вашей функцией os.sysdate() ?