Anton (Все сообщения пользователя)

Выбрать дату в календареВыбрать дату в календаре

Страницы: Пред. 1 ... 5 6 7 8 9 10 11 12 13 14 15 ... 24 След.
Как программно проверить запущен скрипт или остановлен?
 
Цитата
s_mike@rambler.ru написал:
будет освобождаться
С 8.7 будет освобождаться и при падении, починили наконец-то. Естественно, надо соответствующий __gc зарядить непосредственно после создания.
Как программно проверить запущен скрипт или остановлен?
 
Цитата
DVN написал:
без создания файлов
Если дело в длл, можно какой-то именованный объект ядра создавать, мьютекс например.
Почему у Quika - нет нормального полноценного API ?
 
Цитата
Optimus1 Optimus1 написал:
делаете вывод, что такое api не нужно
Я не делаю такого вывода. Чтобы понятно было, давайте разделим вопросы. Во-первых, продублировать прямой доступ к бирже мимо мамбовской бухгалтерии арке никто не позволит, тут же у мамбы найдется партнер полояльнее. То есть вот эти чудеса сразу откладываем в сторону, нужно оно или нет, его не будет (бесплатно по крайней мере), все, вопрос закрыт. Во-вторых, я не зря спрашивал, какого рода апи к клиенту вы хотите видеть. Варианта два на самом деле, либо квик затаскивает себе в процесс вашу длл и без особого оверхеда дергает колбеки на разные события, либо маршалит эти вызовы в ваш процесс. Первое в квике есть в двух видах - плагин апи (затаскивает нативную длл, непубличный) и луа (затаскивает скрипт, а уж он может нативную длл затащить). Второе это как раз вот этот обсуждаемый ужас с out-of-process com, да еще не дай бог с диспинтерфейсами, как в упомянутом экселе. Это просто своими руками взять и хороших тормозов добавить всему клиенту (а не только трем юзерам, которым этот апи нужен). Если вам мое мнение интересно, не нужно плодить зоопарк интерфейсов, надо допилить луа до ума и всем будет хорошо, оверхед там небольшой, нативный код поддерживается, маршалить в свой процесс можете как угодно, хоть тот же ком-сервер в своей длл делайте, а кто-то хочет пайп, а кто-то хочет сокет, а кому-то и из квика нормально.
Почему у Quika - нет нормального полноценного API ?
 
Цитата
Optimus1 Optimus1 написал:
пример конкретной задачи
Дохнет сервер в конце торгового дня, квик подключается на другой, очистка сессии, перезалив всей ТВС за день, тик за тиком дергается ваш апи, на каждом тике маршалинг и ожидание обработки на вашей стороне. Рано или поздно вы, конечно, догоняете сессию, главное чтобы она не закончилась к тому моменту.
Автологин
 
Цитата
Роман написал:
Скрипт говорит, что работает, но соединение автоматом не восстанавливает при обрыве или ручном отключении.
Скрипт и не должен сам по себе инициировать подключение, он ждет появления окна авторизации, заполняет логин и пароль в нем и жмет кнопку ок, ничего более. Если вы руками отключились, зачем-то вы это ведь сделали, как же скрипт за вас решать будет. Жмите снова подключение, появится окно авторизации и через таймаут автоматически исчезнет и квик начнет подключение (таймаут нужен, чтобы вы могли отменить подключение, если случайно не туда кликнули). Чтобы автоподключение происходило при запуске квика, в нем есть настройка "устанавливать соединение". После разрыва связи должна сработать ваша настройка восстановления, если не срабатывает, то потому, что до 0 стоит, поменяйте на 23-59-59.
Автологин
 
Цитата
Роман написал:
рабочий автологин
Вчера же вывалил в другой ветке. Шо, таки не работает?

Цитата
Роман написал:
автоматическое восстановление связи/перелогиниться при обрыве соединения
Это квик и сам умеет, зачем тут скрипт.
Почему у Quika - нет нормального полноценного API ?
 
Цитата
Optimus1 Optimus1 написал:
Записать в есель эти же 450 тыщ строк - занимает не более 5 секунд.
Одним вызовом записывали, сразу все в safearray и вперед в эксель, да? В реале-то оно не так работать будет.

Цитата
Optimus1 Optimus1 написал:
В чем его не реальность то !? И чем api не нравится и кому ?
Люди берут хорошую копейку за доступ, а вы предлагаете воткнуть точно такой же апи в бесплатный квик. Действительно, кому бы это могло не понравиться, теряюсь в догадках.
Почему у Quika - нет нормального полноценного API ?
 
Цитата
Optimus1 Optimus1 написал:
Я так понимаю (возможно я жесЦко ошибаюсь ?), но  trans2quik  - только для выставления заявок.
Не ошибаетесь. Значит, апи это trans2quik с кучкой дополнительных функций, так? Тогда давайте "желать" этих функций в trans2quik, а не предлагать сделать из квика нетинвестор (или метатрейдер, или еще что-то), это все же более реальный сценарий (насколько вариант с полноценным апи в бесплатном рабочем месте вообще реален, у мамбы свой апи есть и ей такой расклад очень не понравится).

Цитата
Optimus1 Optimus1 написал:
А первоначально то, как эту ТВС выгрузить из Quika ?
Да неважно как, хоть "сохранить в текстовый файл", вопрос в том, чтобы все эти 3-6 миллионов строк потом в эксель напихать через ком. Даже не предлагаю время засекать, бо эксперимент закончится через диспетчер задач скорей всего.
Почему у Quika - нет нормального полноценного API ?
 
Цитата
Optimus1 Optimus1 написал:
Точно также как WinApi к примеру.
Этот вариант пропустил. Чем это от trans2quik будет отличаться?
Почему у Quika - нет нормального полноценного API ?
 
Цитата
Optimus1 Optimus1 написал:
Не совсем понял, что вы имели ввиду под выгружать ТВС через ком ? Вы имели ввиду выгружать ТВС встроенную функцию quik через dde в ексель ?
Создать книгу и напихать туда всю твс через ком апи, хоть бы из текстового файла.
Почему у Quika - нет нормального полноценного API ?
 
Цитата
Optimus1 Optimus1 написал:
через COM
Был же нетинвестор с комом, чет никто им не пользовался, так и сдох, странное дело. А ежли в эксель ТВС через ком загружать, через неделю-то он отвиснет, не пробовали?
Почему у Quika - нет нормального полноценного API ?
 
Цитата
Optimus1 Optimus1 написал:
API к ПО Quik
Любопытно узнать, как вы себе его представляете. Ну в общих чертах набросать, мож арка воодушевится и запилит прям через неделю?
Почему у Quika - нет нормального полноценного API ?
 
Цитата
Optimus1 Optimus1 написал:
не могут сделать нормальное полноценное API
Давно сделали, QuikFIX называется.
как подключить .dll к lua скрипту , который выполняется в quik?, как подключить .dll к lua скрипту , который выполняется в quik?
 
Цитата
Optimus1 Optimus1 написал:
Именно так лучше и делать, без всякий тупых костылей в виде Qlua.
Именно так и делали, когда еще не было никакого qlua даже в проекте. Не только лишь для всех занятие, да и кто думает, что уж точно для них, тем определенно еще подумать стоит.
Автовход QUIK
 
Как-то плохо вы искали, тут прям на форуме их вагон и тележка, совсем недавно баттл был, кто первый раздаст свое поделие безвозмездно то есть даром. Вот для 8.5 и выше. В луа-файл свои логин-пароль вписать.
Постоянный вывод по DDE таблицы текущих параметров
 
Цитата
foobar написал:
Текущее значение этого параметра у меня равно 1, т.е. мы хотим видеть обновления таблицы не чаще 1 в сек.
Если ничего не путаю, параметр содержит таймаут, в течение которого квик ожидает WM_DDE_ACK от сервера и при неполучении его в указанное время выбрасывает ошибку "сервер слишком загружен". Каким образом это может быть связано с периодом выдачи снэпшота таблицы - не понимаю, ответу подивился.
Утечка памяти
 
Цитата
Nikolay написал:
утечка памяти
Позанудствую. Утечка - это когда проблемную вкладку закрыли, а память не освободилась (этот сценарий и не описан). Если таки освободилась - это не утечка, а повышенный расход, тоже плохо, но причины другие.
Принципы написания скриптов, Разделять или объединять?
 
Любопытства ради небольшой тест, тксть поверим теорию практикой (вариант с длл писать лень)
Код
function add_global(a, b)
   return a + b
end

local function add_clocal(a, b)
   return a + b
end

function main()
   local count = 10000000
   local function toftime(a)
      local aa = a.hour
      aa = aa * 60
      aa = aa + a.min
      aa = aa * 60
      aa = aa + a.sec
      aa = aa * 1000000
      aa = aa + a.mcs
      return aa
   end
   local function add_flocal(a, b)
      return a + b
   end
   -- perform 'count' function-level function calls
   local sum = 0
   local tm = os.sysdate()
   for i = 0, count - 1 do
      sum = add_flocal(sum, i)
   end
   local tflevel = toftime(os.sysdate()) - toftime(tm)
   -- perfrom 'count' chunk-level function calls
   sum = 0
   tm = os.sysdate()
   for i = 0, count - 1 do
      sum = add_clocal(sum, i)
   end
   local tclevel = toftime(os.sysdate()) - toftime(tm)
   -- perform 'count' global function calls
   sum = 0
   tm = os.sysdate()
   for i = 0, count - 1 do
      sum = add_global(sum, i)
   end
   local tglobal = toftime(os.sysdate()) - toftime(tm)   
   -- perform 'count' inlined pseudocalls
   sum = 0
   tm = os.sysdate()
   for i = 0, count - 1 do
      sum = sum + i
   end
   local tinline = toftime(os.sysdate()) - toftime(tm)
   -- show results
   message("Function call overheads:\n" ..
      "  function-level function: " .. (tflevel - tinline) / count .. "us\n" ..
      "  chunk-level function   : " .. (tclevel - tinline) / count .. "us\n" ..
      "  global function:       : " .. (tglobal - tinline) / count .. "us\n")
end
Отладка QUIK 8.7
 
Цитата
Александр М написал:
Но вы удивительно быстро на него прореагировали
Это не я, это арка.

Цитата
Александр М написал:
у которых сейчас реальные проблемы появились на ровном месте
Гарантийный же случай? )
Принципы написания скриптов, Разделять или объединять?
 
Цитата
Иван Ру написал:
Но если я читаю бид-аск 20 раз за секунду, по 10-ти инструментам, позволительно ли это делать в отдельной функции?
Вызов функции не то чтобы тяжелая операция. Грубо ориентировочно наброшу цифр.

Если функция находится в длл, луа перед ее вызовом снимает лок, а после - снова захватывает, это самая тяжелая часть вызова (самого по себе вызова, не тела функции). Пара EnterCriticalSection/LeaveCriticalSection занимает порядка 100нс, новее железо - меньше. Всем остальным оверхедом вызова в сравнении с этим можно пренебречь, т.е. время на порядок меньше. Ок, чтобы получить оверхед в одну секунду, надо сделать порядка 10 миллионов вызовов функций из длл в одном цикле без слипов и прочих ожиданий.

Если функция написана на луа, лок не выпускается и остается только то, чем мы выше пренебрегли. Предполагая разницу на один порядок, получим, что секундный оверхед будет достигнут на порядка 100 миллионах вызовов.

Резюме: вообще не о чем париться.
Принципы написания скриптов, Разделять или объединять?
 
Цитата
Иван Ру написал:
- Целесообразно ли минимизировать использование колбэков и как?
Это вопрос архитектурный. Варианта два.

Первый - это event-driven архитектура, тут колбеки движущая сила всего, пришел колбек - это событие, вы это событие как-то обрабатываете, если обработка предполагает что-то тяжелое - вы только запускаете операцию и возвращаетесь из колбека, а о ее завершении вам сообщит другой колбек, уже ваш собственный.

Второй это поллинг, ваш мейн шаг за шагом следует какому-то плану. Где ему нужны какие-то данные, он их заказывает и ждет ответа, где нужно что-то отправить он отправляет и ждет ответа. Уже по описанию видно, насколько шустро оно будет работать, хотя есть, несомненно, задачи, в которых и так сойдет. Другой недостаток - вы видите какое-то событие только в тот момент, когда решили на него посмотреть, а оно может уже часа два как произошло. Например, пока вы считали что-то и готовили транзакцию, квик потерял соединение, но вы еще об этом не знаете и продолжаете готовиться к своей сделке века, которая закончится ничем, бо нет коннекта. Утрирую для наглядности.

Третий вариант это как тут часто в вопросах попадается, когда смешали все в кучу и получилась, естественно, куча.
Принципы написания скриптов, Разделять или объединять?
 
Цитата
nikolz написал:
Я вам предлагаю для примера посмотреть алгоритм БПФ либо нейронной сети
Не спорю, тяжелая вычислялка, пригодная для распараллеливания, от потоков выиграет. Но такое на луа писать несколько самонадеянно, даже и в виде длл. Если данные в виде луа-таблицы, мы больше потеряем на доступе к ней, тут нужны плейн массивы. В сухом остатке на долю луа остается периодически подбрасывать новые данные по мере их приезда с сервера, а для этого много потоков не нужно и даже вредно, сеть-то сама по себе труба в одну нитку. Равно и в обратную сторону, можно натыкать миллион транзакций и они встанут в очередь на сокете и ничего более. В данном случае асинхронность лучше многопоточности, а у этого подхода есть ограничительный фактор - целевая аудитория может ниасилить.
Принципы написания скриптов, Разделять или объединять?
 
Цитата
nikolz написал:
Каждый скрипт условно можно разделить на три части1) действия вне колбеков и функции main - это отдельный поток и VM Lua2) функция main каждого скрипта - это отдельный поток и VMLua3) вызов и исполнение  функций колбек осуществляется  в одном основном потоке термина.
Не совсем оно так, стейт для тела скрипта и колбеков один и выполняется в основном потоке квика, стейт для мейна второй и выполняется в специально для него созданном потоке. То есть ваш п.1 лишний, нет отдельного стейта для тела.

Ваши мысли насчет 128 ядер это из разряда давайте загрузим проц бесполезной работой, чо он простаивает-то. В любом случае ваши 100500 потоков будут сериализоваться на доступе к общим ресурсам, т.е. в основном (в таком количестве) они будут крутить спинлок. Для примера предлагаю прогу из directx sdk, где можно отрисовать одно и то же либо одним потоком, либо многими. Запустите и убедитесь, что проц оно жрет в N раз больше, а fps растет процентов на 5.
Отладка QUIK 8.7
 
Цитата
_sk_ написал:
Думаю, лучше сделать так: если пользователь изменил значение параметра, оставив его целым, всё хорошо, а если пользователь хочет поставить дробное значение параметра, пусть ставит, после чего происходит преобразование в тип float.
Исхожу из такого соображения: если автор индикатора хочет (только) целое, он инициализирует целым и тем самым отрезает юзеру возможность вбить что-то нецелое. Пример: для ema можно использовать дробный период, для sma - нельзя. Пусть во втором случае юзер вбил дробное число, как ему теперь посигналить, что число будет округлено до целого? Он же ж останется в уверенности, что у него sma с периодом 3.14, а она с периодом 3. С целым нет проблем, он просто не сможет вбить 3.14 и это сподвигнет его задуматься, то ли он творит.
Отладка QUIK 8.7
 
Цитата
_sk_ написал:
Да ещё и регрессы в тех местах, которые не ожидали увидеть (см. второе сообщение темы).
Строго говоря это не баг, а наоборот в соответствии с пожеланием не то чтобы давним. Вот поэтому и приходится влезать в некоторые темы и пытаться доказать некоторым пожелателям, что их некоторые пожелания не так уж хороши, как им кажется. Ну в этом конкретном случае я скорее за, оно так логичнее.
Отладка QUIK 8.7
 
В традиционное "раньше было лучше" внесу диссонанс: давняя проблема с неочисткой памяти при ошибке в OnInit наконец решена. Четенько все подчищается. Ура товарищи и спасибо за исправление.
Резкое увеличение размера alltrades.dat при переходе на Quik v.8, Размер файла alltrades.dat при переходе c Quik v.6 на Quik v.8 увеличивается более, чем в 1,5 раза при том же количестве сделок
 
Цитата
Imersio Arrigo написал:
Все сделки и все заявки - Тип А
Дык это фулл ордер лог. Аналог ТВС это тип C.
Ошибка при использовании CreateDataSource
 
Цитата
Владимир написал:
OnCalculate запускается дважды
Косяк это.
Резкое увеличение размера alltrades.dat при переходе на Quik v.8, Размер файла alltrades.dat при переходе c Quik v.6 на Quik v.8 увеличивается более, чем в 1,5 раза при том же количестве сделок
 
Цитата
Борис написал:
На что тратятся ещё 200 Мбайт?!
Во-первых, многие поля стали 64-битными. Во-вторых, зарезервировали больше места под каждый тик. На вопросы зачем да почему ответить может только арка, если захочет, но обсуждать формат они вряд ли станут, а в общих чертах не знаю, что можно добавить к сказанному.

Цитата
Борис написал:
Нельзя ли что-нибудь сделать
Если архивируете, сжатие в зип или в рар может существенно уменьшить размер, раз эдак в 10. Если жаль диска в течение дня, можно попробовать включить сжатие непосредственно системой (в свойствах файла атрибуты - другие - сжимать содержимое для экономии места), но это теоретически тормозов добавит, практически не пробовал вообще.
Экспорт по DDE таблицы обезличенных котировок с FORTS, Неверная Дата торгов
 
Потому что надо различать "дата" и "дата торгов". Первое это когда сделка фактически произошла, второе это в какую сессию она будет учтена.
Кто как решил вопрос уведомления о сделках?
 
Цитата
nikolz написал:
мешает передать сообщение по схеме pоint to point
динамический айпи как минимум с одной стороны, а как правило - с обеих. Если на проводной стороне еще можно купить статический, то на стороне мобилы вряд ли. Времена честных интернетов давно прошли, теперь это телевизор с фидбеком.
Активные инструменты Вечерней сессии основного рынка Мосбиржи, Непонятно как отслеживать инструменты вечерней сессии, они никак не выделяются на фоне неактивных!
 
Цитата
Андрей К написал:
разделение активных и не акктивных инструменотов
Отдельную табличку для вечерки, отдельную для дня, не?
Базовый актив по фьючерсу, Базовый актив по фьючерсу можно ли получить
 
Цитата
just написал:
Ну в итоге цена Si определяется реальной средневзвешенной ценой USDRUB_TOD...
Табличка в приложении 1 говорит таки о TOM.
Базовый актив по фьючерсу, Базовый актив по фьючерсу можно ли получить
 
Цитата
Незнайка написал:
Это как?
Через iss. Там базовый актив в поле assetcode и там внезапно GAZR. Про спектру, ежли уж на то пошло,
Цитата
base_contract_code (c25) - код базового актива.
, но показать/посмотреть не могу, может там тоже GAZR окажется.
Базовый актив по фьючерсу, Базовый актив по фьючерсу можно ли получить
 
Цитата
Незнайка написал:
OPTIONBASE возвращает GAZR
Действительно. И getSecurityInfo тоже. Получается, что ответ с анекдотом - вариант раз, ответ с "читаем спецификацию" - вариант два. Как ни странно, гипотетический вариант три - "качаем листинг напрямую с мамбы" - не сработает, там тоже (в общем листинге) базового нет. Видимо, квик сам оттуда и тащит.
Базовый актив по фьючерсу, Базовый актив по фьючерсу можно ли получить
 
Цитата
Незнайка написал:
рабочий Lua-код
уже написан в первом сообщении темы.
Ошибка скрипта Lua
 
В luacdll.lua должно быть буквально следующее
Код
package.loadlib(getScriptPath() .. "\\luacdll.dll", "luaopen_luacdll")()
Округление значений и расположение их под разрядами в "Состоянии счета" и других таблицах
 
Цитата
A117 написал:
И выравнивание в столбце по запятой.
Надо заметить, что выравнивание будет удобно читаться только при моноширинном шрифте, типа courier или consolas, с пропорциональными шрифтами будет все равно кашеообразно, даже может быть хуже, чем без выравнивания. Дефолтный виндовый segoe - пропорциональный.
Перестала работать getQuoteLevel2
 
Запустил у себя
Код
local run = true
local cls = 'SPBFUT'
local sec = 'RIU0'

function OnStop()
   run = false
end

function main()
   if not Subscribe_Level_II_Quotes(cls, sec) then
      error('Subscription failed')
   end
   while run do
      local t = getQuoteLevel2(cls, sec)
      if t then
         message('bid: ' .. t.bid_count .. '\nask: ' .. t.offer_count)
      else
         message('getQuoteLevel2 failed')
      end
      sleep(1000)
   end
   Unsubscribe_Level_II_Quotes(cls, sec)
end
- все ок. Что-то локально-брокерское может быть, в связи с нововведениями?
Перестала работать getQuoteLevel2
 
А на стакан подписывались?
Нулевые значения PRICEMIN и PRICEMAX
 
Цитата
rodionos написал:
Видны ли вам актуальные значения PRICEMIN / PRICEMAX по состоянию на 22.06?
Проверил, нули. Что было раньше не знаю => когда началось сказать не могу.
Нулевые значения PRICEMIN и PRICEMAX
 
Цитата
Nikolay написал:
брать через API биржи HTTP запросом напрямую
Если упустили новость, теперь можно https запросом, удерживаем соединение и сильно выигрываем в скорости при массированных запросах. Раньше мамба кип-элайф не поддерживала, создавать новое соединение на каждый запрос было грустно. Ну и логин-пароль как-то приятнее так посылать, ежли оно у кого есть конечно.
Createsource и смена сессии
 
Цитата
Старатель написал:
Приходится либо снимать дубликаты, либо работать в main с неопределённой задержкой.
Есть еще вариант пульнуть фейковый стоп по нереальной цене и подождать ответа, тксть протолкнуть им. И снять тут же, конечно. Фактически сымитировать тот самый флаг "ответ приехал". Но датасорец, конечно, так не протолкнешь.
Createsource и смена сессии
 
Кстати говоря, при наличии флажка таки сохраняется вариант зависнуть навеки в цикле, если первым придет дисконнект. Все же поллинг зло как ни крутись.
Createsource и смена сессии
 
Цитата
Старатель написал:
Сейчас, когда сервер хранит 3000+, а клиент 65 тыс. количество свечей на сервере не особо то поможет, скорее навредит.
Да, об этом не подумал. Тогда остается что, а остается ничего, сам факт приезда (первого) пакета на клиент только. Даже и функции много, флажок в датасорце, "ответ сервера получен". В сухом остатке что тогда от арки требуется: 1) убедиться, что сервер всегда что-нибудь отвечает на подписку, есть ли данные или нет; 2) на клиенте по получении первого ответа поставить флажок в датасорце.
Падает quik 8.6.0.97
 
Цитата
ISR написал:
Не помогло, упал без дампа молча.
Вытащите из Program Files в корень диска или еще куда, где на запись доступно.
Createsource и смена сессии
 
Цитата
Старатель написал:
Если сервер не повторил отправку неподтверждённого пакета, то вопрос к серверу, почему?
Думаю, сервер получил от шлюза уведомление, ткнулся его переслать клиенту, а там дисконнект. И выбросил. Гарантированная доставка это что-то типа MQ, сомневаюсь, что в квике так сделано.

Цитата
Старатель написал:
Скорее всего, sendTransaction только проверяет валидность параметров и доступность указанной транзакции и сразу возвращает результат этой проверки, а саму транзакцию ставит в очередь на отправку.
Скорее всего да, но в данном случае не должен был делать ничего, кроме возврата ошибки, поскольку уже инициирован дисконнект. Тут опять дело в синхронизации, видимо. Квик мог бы все запросы от скриптов и нижнего уровня пропускать через SendMessage главному потоку, так что при обработке любого сообщения состояние было бы всегда консистентным без всякой дополнительной синхронизации. Но это было бы узкое место во всей системе. Судя по всему, часть операций скрипт выполняет, непосредственно дергая апи нижнего уровня, мимо главного окна (и его потока), равно как и нижний уровень сначала меняет состояние, а потом уведомляет главный поток сообщением. И в результате получается рассинхрон, как в этом примере, главное окно считает, что оно инициировало дисконнект, а скрипт и нижний уровень еще вовсю транзакции пуляют.
Createsource и смена сессии
 
Цитата
Старатель написал:
А что с тиками не так?
Они едут в ТВС всей (заказанной) толпой, по отдельным датасорцам их клиент должен разбирать, так что серверу тут нечего отправить в качестве текущего количества свечей по конкретному тикеру. Можно даже предположить, что он и по всей ТВС затруднился бы сказать, сколько у него тиков в моменте.

Цитата
Старатель написал:
Имитация разрыва соединения с сервером
Тут как раз логично выглядит. Для клиента отправленная транзакция закончилась дисконнектом, а в новом подключении клиент обнаружил неизвестно откуда взявшийся ордер, может его руками поставили с другого клиента. Скорей вопрос, почему квик после команды дисконнекта позволяет еще что-то отправить. Очевидно, дело в том, что мейн успевает пропихнуть транзакцию, пока основной поток в неопределенном состоянии. На досуге поковыряю тему, может что не так понял чисто по коду. Я про другое говорил, когда на некоторые транзакции вообще колбека нет (без потери соединения).
Createsource и смена сессии
 
Цитата
Старатель написал:
не понимает
Все он понимает, но ему-то придется думать, как минимум, как эту схему на тики распространить. Я вот не придумал так сходу. Пока не будет точно ясно, скока вешать в граммах, будут общие фразы "когда-нибудь рассмотрим и подумаем". Когда что-то четко формулируется, они сразу же это и делают. Соответственно если хотим что-то получить, надо это что-то обсосать до реализуемого вида, подход "мне все равно как вы будете делать" работает против пожелателя, бо раз все равно, то "никак" тоже вариант.
Createsource и смена сессии
 
Цитата
Старатель написал:
Клиент посылает запрос серверу, тот в ответ либо сразу пушит данные, если они есть, либо отвечает, что данных нет. Пока нет. Они, может быть, и появятся когда-нибудь, но мы этого не знаем.
Так-то мы и без специального уведомления знаем, что данные может когда-нибудь появятся, ну может через неделю, а может и нет. У меня созрела схема получше, давайте попробуем на нее посмотреть. В датасорец добавляем функцию ds:ExpectedSize. Сразу после подписки там nil. Когда сервер что-то посылает по подписке, он также добавляет поле с количеством свечей у него в данный момент. То есть в каждом пакете отправляемом. Как только первый пакет с сервера приехал, это поле становится доступным через ds:ExpectedSize(), далее с каждым пакетом это поле обновляется. Старая ds:Size() продолжает работать как работала, это количество свечей в хранилище у клиента. Что мы получаем в итоге. После подписки, пока ds:ExpectedSize() возвращает nil, мы знаем, что подписка отправлена, но ничего еще не приехало. Потом что-то приехало, пусть одна свечка, ds:Size() дает 1, но ds:ExpectedSize() дает больше, ок, мы знаем, что надо еще подождать. Либо на сервере нет свечей, тогда ds:ExpectedSize() возвращает 0 и мы знаем, что ждать в данный момент больше нечего. Либо мы получили все что есть и ds:ExpectedSize() == ds:Size(), дальше, если хотим реалтайму, никто не запрещает поллить периодически или настроить колбек. В чем-то перекликается с предложениями от Nikolay выше. Правда, не очень представляю, как это будет с тиками работать, они ж по каналу ТВС едут, там свои погремушки.

Цитата
Старатель написал:
И почему ответ OnTransReply на транзакцию может потеряться - сие остаётся загадка.
Дык он не теряется, насколько мне известно, в потоке ответ есть, колбек не дергается почему-то. Может быть потому, что кто ж тогда будет другие продукты покупать.
Страницы: Пред. 1 ... 5 6 7 8 9 10 11 12 13 14 15 ... 24 След.
Наверх