Добрый день,
Вопрос к разработчикам
В документации на библиотеку 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() ?