Добрый день,
Неоднократно на форуме интересовались передачей данных из QUIK в другое приложение(процесс).
Есть много способов.
Наиболее универсальным является file mapping
Этот метод позволяет обмениваться данными практически любого объема.
Использую этот метод не только для QUIK
------------------
В названии метода есть слово файл.
Уверен, что многие скривятся и скажут, что метод медленно работает.
А вот и нет. .
---------------------------------
Что нам рассказывает об этом методе Майкрософт:
--------------------------
Это объединение содержимого файла с частью виртуального адресного пространства процесса.
Система создает объект сопоставления файлов (также известный как объект раздела) для поддержания этой связи.
Просмотр файла - это часть виртуального адресного пространства, которую процесс использует для доступа к содержимому файла.
Сопоставление файлов позволяет процессу использовать как случайный ввод-вывод (I / O), так и последовательный ввод-вывод.
Это также позволяет процессу эффективно работать с большим файлом данных, таким как база данных,
без необходимости отображать весь файл в памяти.
Несколько процессов также могут использовать файлы, сопоставленные с памятью, для обмена данными.
фрагмент скрипта в QUIK:
результат вывода параметров в SciTe:
первое число в стоке - задержка передачи параметров из QUIK в приложение в мкс.
--------------------
Резюме: задержка передачи методом file mapping параметров из QUIK в другое приложение составляет 0.0000001 сек.
Неоднократно на форуме интересовались передачей данных из QUIK в другое приложение(процесс).
Есть много способов.
Наиболее универсальным является file mapping
Этот метод позволяет обмениваться данными практически любого объема.
Использую этот метод не только для QUIK
------------------
В названии метода есть слово файл.
Уверен, что многие скривятся и скажут, что метод медленно работает.
А вот и нет. .
---------------------------------
Что нам рассказывает об этом методе Майкрософт:
--------------------------
Это объединение содержимого файла с частью виртуального адресного пространства процесса.
Система создает объект сопоставления файлов (также известный как объект раздела) для поддержания этой связи.
Просмотр файла - это часть виртуального адресного пространства, которую процесс использует для доступа к содержимому файла.
Сопоставление файлов позволяет процессу использовать как случайный ввод-вывод (I / O), так и последовательный ввод-вывод.
Это также позволяет процессу эффективно работать с большим файлом данных, таким как база данных,
без необходимости отображать весь файл в памяти.
Несколько процессов также могут использовать файлы, сопоставленные с памятью, для обмена данными.
Процессы считывают данные и записывают в файловое представление, используя указатели, точно так же, как они делали бы с динамически выделяемой памятью.
Использование данного метода повышает эффективность, поскольку файл находится на диске, а представление файла - в памяти.
===========================
Тест для измерения задержки передачи данных из скрипта QUIK в приложение.
скрипт Теста в SciTe:
Код |
---|
paths = "D:/nkarray/" package.cpath =paths.."?.dll;" require"nkthread" ---------------------- local T=0; while true do local T1,dt,hms,s,num,HMS,ss=nkmx.gsm(0,T); if T1 then T=T1; print(0.1*dt,hms,s,num,HMS,ss); end end |
Код |
---|
function OnAllTrade(t) local c,s=t.class_code,t.sec_code; local z=ds[c..s]; local num=t.trade_num; if z then local d=z[1]; local n=z[2]; local f=z[3]; local Ti=t.datetime; local HMS=(60*(60*Ti.hour+Ti.min)+Ti.sec)+0.001*Ti.ms; local D=os.date("*t"); local hms=60*(60*(D.hour-shH)+D.min)+D.sec-shS; local dt= hms-HMS+n; local size=d:Size(); local T1=d:T(size); local HMS1=(60*(60*T1.hour+T1.min)+T1.sec)+0.001*T1.ms; if HMS==HMS1 and z[4]~=num then local dt1=0.01*math.floor(100*dt); if 0>dt then dt=0 end count=count+1; count1=count1+1; local m=math.floor(dt)+1; local ss=tostring(hms)..","..tostring(s)..",num="..tostring(num)..",size="..tostring(size)..",HMS="..tostring(HMS)..",dt="..tostring(dt1)..",n="..tostring(n)..",m="..tostring(m)..",clock="..(os.clock()-clockOS); nkmx.ssm(0,hms,s,num,HMS,ss); -- Log:write(ss.."\n"); Log:flush(); if sts[m] then sts[m]=sts[m]+1; else sts[m]=1 end end z[4]=num; end end |
Код |
---|
0.0 46972 MTSS 4794253307 44952.0 46972,MTSS,num=4794253307,size=2390,HMS=44952.0,dt=2020.0,n=0,m=2021,clock=8.4760000000024 0.1 46972 MTSS 4794253308 44952.0 46972,MTSS,num=4794253308,size=2391,HMS=44952.0,dt=2020.0,n=0,m=2021,clock=8.4760000000024 0.1 46972 FIVE 4794253618 44971.0 46972,FIVE,num=4794253618,size=2756,HMS=44971.0,dt=2001.0,n=0,m=2002,clock=8.4760000000024 0.1 46972 FIVE 4794253619 44971.0 46972,FIVE,num=4794253619,size=2757,HMS=44971.0,dt=2001.0,n=0,m=2002,clock=8.4760000000024 0.1 46972 FIVE 4794253620 44971.0 46972,FIVE,num=4794253620,size=2758,HMS=44971.0,dt=2001.0,n=0,m=2002,clock=8.4760000000024 0.1 46972 FIVE 4794253621 44971.0 46972,FIVE,num=4794253621,size=2759,HMS=44971.0,dt=2001.0,n=0,m=2002,clock=8.4760000000024 0.1 46972 MTSS 4794253982 44990.0 46972,MTSS,num=4794253982,size=2394,HMS=44990.0,dt=1982.0,n=0,m=1983,clock=8.4760000000024 0.1 46972 MTSS 4794255354 45061.0 46972,MTSS,num=4794255354,size=2396,HMS=45061.0,dt=1911.0,n=0,m=1912,clock=8.4760000000024 0.1 46972 MTSS 4794255355 45061.0 46972,MTSS,num=4794255355,size=2397,HMS=45061.0,dt=1911.0,n=0,m=1912,clock=8.4760000000024 0.1 46972 MTSS 4794255356 45061.0 46972,MTSS,num=4794255356,size=2398,HMS=45061.0,dt=1911.0,n=0,m=1912,clock=8.4760000000024 0.1 46972 MTSS 4794255903 45095.0 46972,MTSS,num=4794255903,size=2402,HMS=45095.0,dt=1877.0,n=0,m=1878,clock=8.4770000000026 0.1 46972 MTSS 4794255904 45095.0 46972,MTSS,num=4794255904,size=2403,HMS=45095.0,dt=1877.0,n=0,m=1878,clock=8.4770000000026 0.1 46972 FIVE 4794256157 45107.0 46972,FIVE,num=4794256158,size=2763,HMS=45107.0,dt=1865.0,n=0,m=1866,clock=8.4770000000026 0.1 46972 FIVE 4794256158 45107.0 46972,MTSS,num=4794256215,size=2405,HMS=45110.0,dt=1862.0,n=0,m=1863,clock=8.4770000000026 0.1 46972 MTSS 4794256215 45110.0 46972,MTSS,num=4794256215,size=2405,HMS=45110.0,dt=1862.0,n=0,m=1863,clock=8.4770000000026 0.1 46972 MTSS 4794256220 45111.0 46972,MTSS,num=4794256220,size=2407,HMS=45111.0,dt=1861.0,n=0,m=1862,clock=8.4770000000026 0.1 46972 VSMO 4794213402 42862.0 46972,VSMO,num=4794213402,size=2696,HMS=42862.0,dt=4110.0,n=0,m=4111,clock=8.4770000000026 0.1 46972 VSMO 4794213403 42862.0 46972,VSMO,num=4794213403,size=2697,HMS=42862.0,dt=4110.0,n=0,m=4111,clock=8.4770000000026 0.1 46972 VSMO 4794213404 42862.0 46972,VSMO,num=4794213404,size=2698,HMS=42862.0,dt=4110.0,n=0,m=4111,clock=8.4770000000026 0.1 46972 VSMO 4794213405 42862.0 46972,VSMO,num=4794213405,size=2699,HMS=42862.0,dt=4110.0,n=0,m=4111,clock=8.4770000000026 0.1 46972 VSMO 4794213406 42862.0 46972,VSMO,num=4794213406,size=2700,HMS=42862.0,dt=4110.0,n=0,m=4111,clock=8.4770000000026 0.1 46972 VSMO 4794213881 42889.0 46972,VSMO,num=4794213881,size=2702,HMS=42889.0,dt=4083.0,n=0,m=4084,clock=8.4770000000026 0.1 46972 VSMO 4794214435 42919.0 46972,VSMO,num=4794214435,size=2704,HMS=42919.0,dt=4053.0,n=0,m=4054,clock=8.482 0.0 46972 VSMO 4794214436 42919.0 46972,VSMO,num=4794214436,size=2705,HMS=42919.0,dt=4053.0,n=0,m=4054,clock=8.482 0.1 46972 VSMO 4794214729 42935.0 46972,VSMO,num=4794214729,size=2707,HMS=42935.0,dt=4037.0,n=0,m=4038,clock=8.482 0.1 46972 VSMO 4794214730 42935.0 46972,VSMO,num=4794214730,size=2708,HMS=42935.0,dt=4037.0,n=0,m=4038,clock=8.482 0.1 46972 VSMO 4794214732 42936.0 46972,VSMO,num=4794214732,size=2710,HMS=42936.0,dt=4036.0,n=0,m=4037,clock=8.482 0.1 46972 VSMO 4794214733 42936.0 46972,VSMO,num=4794214733,size=2711,HMS=42936.0,dt=4036.0,n=0,m=4037,clock=8.482 0.1 46972 VSMO 4794214734 42936.0 46972,VSMO,num=4794214734,size=2712,HMS=42936.0,dt=4036.0,n=0,m=4037,clock=8.482 0.1 46972 VSMO 4794214735 42936.0 46972,VSMO,num=4794214735,size=2713,HMS=42936.0,dt=4036.0,n=0,m=4037,clock=8.482 0.0 46972 VSMO 4794214736 42936.0 46972,VSMO,num=4794214736,size=2714,HMS=42936.0,dt=4036.0,n=0,m=4037,clock=8.482 0.1 46972 VSMO 4794214737 42936.0 46972,VSMO,num=4794214737,size=2715,HMS=42936.0,dt=4036.0,n=0,m=4037,clock=8.482 0.1 46972 VSMO 4794214738 42936.0 46972,VSMO,num=4794214738,size=2716,HMS=42936.0,dt=4036.0,n=0,m=4037,clock=8.482 |
--------------------
Резюме: задержка передачи методом file mapping параметров из QUIK в другое приложение составляет 0.0000001 сек.