Если бы я был архитектором QUIK

Страницы: Пред. 1 2
RSS
Если бы я был архитектором QUIK, Что стоило бы изменить в QUIK по-крупному
 
Вопрос к поддержке:
   В QUIKе много различных коллбеков. Где гарантии, что они не пропускают события, по которым должны выполняться?
Пропуск событий в заявленных коллбеках, даже если это происходит нечасто, это ошибка QUIK.
   В существующей версии QUIK коллбеки выполняются в единственном служебном потоке.  Что происходит в QUIKе если возникает очередное новое событие, по которому должен выполниться коллбек и при этом не был обработан предыдущий? Есть служебные очереди необработанных событий?
   В существующей версии QUIK выполнение коллбека блокируется до тех пор пока в потоке main не выполнится sleep или сишная функция.
   Выше написанное означает полную зависимость служебного потока от пользовательского. Зачем это сделано в QUIKe?
   В этой ветке были изложены предложения, которые, по моему мнению, могли бы устранить описанные выше проблемы. Что в этих предложениях не понятно или вызывает сомнения?
 
Цитата
TGB написал:
В существующей версии QUIK выполнение коллбека блокируется до тех пор пока в потоке main не выполнится sleep или сишная функция.     Выше написанное означает полную зависимость служебного потока от пользовательского. Зачем это сделано в QUIKe?
Блокируется на время выполнения байт-кода. Не представляю, какой код нужно написать без вызова сишных функций, выполняющийся длительное время, чтобы это можно было заметить.
 
Функция  sleep  уступает свободное время потока следующему потоку.
Например sleep(1000) в main означает, что поток main будет остановлен системой на 1000 ms.
-----------------------
Таким образом,
функция sleep выполняется  быстро, так как ее задача сообщить ОС
чтобы та разбудила поток через заданное время.
ОC устанавливает таймер на событие "запустить поток main через 1000 ms.
------------------------
Все эти действия выполняются буквально мкс .
Поэтому ничего не блокируется для исполнения sleep.
 
чтобы остановить выполнение потоко с колбеком надо в функцию колбека поставить sleep.
Поток колбека будет остановлен на время указанное в sleep.
 
и еще...
Если значение аргумента sleep равно нулю, поток освобождает оставшуюся часть своего интервала времени для любого потока с таким же приоритетом, готовым к выполнению.
Если других готовых к выполнению потоков с таким же приоритетом нет, выполнение текущего потока не приостанавливается.
 
Цитата
nikolz написал:
Поэтому ничего не блокируется для исполнения sleep.
    Когда же вы научитесь читать :smile: ? Вы читаете тексты перед тем как писать?
  Ведь написано:
Цитата
TGB написал:
блокируется до тех пор пока в потоке main не выполнится sleep или сишная функция
 Где вы видите у меня фразу: "для исполнения"?  
 У вас какое то недержание ваших текстов.
 
Цитата
TGB написал:
Цитата
nikolz написал:
Поэтому ничего не блокируется для исполнения sleep.
     Когда же вы научитесь читать :: ? Вы читаете тексты перед тем как писать?
  Ведь написано:
Цитата
TGB написал:
блокируется до тех пор пока в потоке main не выполнится sleep или сишная функция
  Где вы видите у меня фразу: "для исполнения"?  
 У вас какое то недержание ваших текстов.
Вы тоже не умеете читать.
Что именно по-вашему блокируется  "пока в потоке main не выполнится sleep"  
Напишите конкретно от какого до какого момента исполнения кода в функции Main блокируется
--------------------
Я написал именно на это ваше высказывание.
Ничего не блокируется "до тех пор пока в потоке main не выполнится sleep или сишная функция"
===================
Поясняю специально для Вас:
Поток может останавливается в многопоточной системе  если он обращается к ПАМЯТИ  ДАННЫХ ,
к которой обращается в данный момент другой поток. И то если потоки должны писать в эту память.
Если они читатели то никакой блокировки никто не делает.
---------------------------------------
Теперь скажите  К КАКОЙ ПАМЯТИ ВСЕГДА одновременно обращаются колбек и поток main  для записи данных в эту память
"до тех пор пока в потоке main не выполнится sleep или сишная функция"
--------------------------------------
 
TGB,
Если Вы знаете русский язык, то фраза
"до тех пор пока в потоке main не выполнится sleep или сишная функция"
означает, что время измеряется от некоторого момента до выполнения sleep  до момента окончания выполнения sleep.
-----------------
И понять эту фразу очень сложно.
Время до оператора  sleep     -   это время обработки очереди в цикле в main (пример есть в документации).  
Если бы в это время колбеки остановились, то никакой очереди создать было бы невозможно.
--------------------
момент времени после исполнения sleep   Если в sleep 0, то это практически время начала исполнения sleep  B этом случае оно совпадает с началом цикла обработки очереди.
-----------------------------
таким образом Вы сказали буквально следующее:  Колбеки всегда остановлены если в main нет функции sleep или параметр у нее равен нулю.
Но колбеки прекрасно работают и без sleep в main.
----------------------------
Согласитесь, что вы сказали чушь.
 
Цитата
nikolz написал:
Что именно по-вашему блокируется  "пока в потоке main не выполнится sleep"  Напишите конкретно от какого до какого момента исполнения кода в функции Main блокируется
    Вы опять не читаете или ничего не соображаете.  У меня же написано конкретно то, что давно известно:
Цитата
TGB написал:
В существующей версии QUIK выполнение коллбека блокируется до тех пор пока в потоке main не выполнится sleep или сишная функция.
   Выполните в main строку: for i = 0, 10000000000 do  end
  и вы заблокируете секунд на 30 не только коллбеки, но и диалог QUIK.
  -----
Цитата
nikolz написал:
Вы сказали буквально следующее:  Колбеки всегда остановлены если в main нет функции sleep или параметр у нее равен нулю.
   Вы опять меня "передергиваете".  Где я это писал буквально?  Читайте мою приведенную выше цитату. Вы понимаете что означает слово буквально?
 Зачем вы меня "передергиваете" и пытаетесь приписать свои фантазии?
 Вы продолжаете работать прокладкой между комментариями :smile: ?
 
В песочнице QUIK 12.8.3.4 была создана заявка с номером 10256702148.
Она не удаляется ни вручную ни из скрипта.
 Выдается сообщение: "Не удалось снять заявку с номером 10256702148"
 Распечатка заявки из таблицы orders:
<code>
{--таблица: 18.02.26 13:04:52:795 - время создания.
  ['lseccode'] = [=[]=]
, ['qty'] = 7.0
, ['activation_time'] = 0
, ['accepted_uid'] = 0
, ['revision_number'] = 0
, ['sec_code'] = [=[YDEX]=]
, ['investment_decision_maker_short_code'] = 0
, ['visible_repo_value'] = 0.0
, ['accruedint'] = 0.0
, ['executing_trader_qualifier'] = 0
, ['trading_session'] = 0
, ['account'] = [=[NL0011100043]=]
, ['client_qualifier'] = 0
, ['operation_type'] = 0
, ['min_qty'] = 0.0
, ['ext_order_flags'] = 0
, ['client_code'] = [=[10379]=]
, ['price'] = 4917.0
, ['exchange_code'] = [=[]=]
, ['order_num'] = 10256702148
, ['passive_only_order'] = 0
, ['reject_reason'] = [=[]=]
, ['withdraw_datetime'] = { -- table: 00000171D1A2F9A0
 ['min'] = 0
, ['week_day'] = 1
, ['sec'] = 0
, ['ms'] = 0
, ['day'] = 1
, ['year'] = 1601
, ['mcs'] = 0
, ['month'] = 1
, ['hour'] = 0
 }
, ['visible'] = 0.0
, ['yield'] = 0.0
, ['settle_date2'] = 0
, ['price_currency'] = [=[]=]
, ['on_behalf_of_uid'] = 0
, ['awg_price'] = 0.0
, ['linkedorder'] = 0
, ['trans_id'] = 105007541
, ['start_date'] = 0
, ['firmid'] = [=[NC0011100000]=]
, ['value2'] = 0.0
, ['executing_trader_short_code'] = 0
, ['exec_type'] = 0
, ['extref'] = [=[]=]
, ['value'] = 34419.0
, ['repo_value_balance'] = 0.0
, ['repovalue'] = 0.0
, ['datetime'] = { -- table: 00000171D1A2FB20
 ['min'] = 36
, ['week_day'] = 3
, ['sec'] = 57
, ['ms'] = 0
, ['day'] = 18
, ['year'] = 2026
, ['mcs'] = 0
, ['month'] = 2
, ['hour'] = 6
 }
, ['class_code'] = [=[QJSIM]=]
, ['value_entry_type'] = 0
, ['settle_date'] = 0
, ['acnt_type'] = 0
, ['brokerref'] = [=[10379//1]=]
, ['start_discount'] = 0
, ['balance'] = 7.0
, ['side_qualifier'] = 0
, ['seccode'] = [=[YDEX]=]
, ['external_qty'] = 0.0
, ['benchmark'] = [=[]=]
, ['qty2'] = 0.0
, ['client_short_code'] = 0
, ['repoterm'] = 0
, ['price_entry_type'] = 0
, ['visibility_factor'] = 0.0
, ['ext_order_status'] = 0
, ['flags'] = 29
, ['settlecode'] = [=[]=]
, ['uid'] = 228221
, ['expiry'] = -1
, ['bank_acc_id'] = [=[]=]
, ['repo2value'] = 0.0
, ['capacity'] = 0
, ['ordernum'] = 10256702148
, ['price2'] = 0.0
, ['investment_decision_maker_qualifier'] = 0
, ['userid'] = [=[NC0011100000]=]
, ['expiry_time'] = -1
, ['canceled_uid'] = 0
, ['settle_currency'] = [=[]=]
, ['filled_value'] = 0.0
}--таблица: 18.02.26 13:04:52:795
<code>
----
Архив песочницы для анализа поддержкой: https://cloud.mail.ru/public/LTv3/NMDsG3SZD
Страницы: Пред. 1 2
Читают тему
Наверх