по CALLBACK

Страницы: 1
RSS
по CALLBACK, алгоритм работы
 
Добрый день!
Проясните, пожалуйста алгоритм работы.
Работает скрипт, происходит событие.
Скрипт прерывается и включается обработка? А потом скрипт продолжает работу?
Как сделать так, чтобы пока, например, функция не выполнится, обработка не выполнялась? В тех случаях, когда мне так надо.
Бывают случаи, например когда нужно снять заявки. Скрипт начинает их удалять, одну удалил, произошло событие - снятие, и скрипт может сбиться, потому что данные для второго удаления уже изменились, а мне надо, чтобы первый "слепок" данных не менялся.
 
Здравствуйте,
Цитата
Viktor MMM пишет:
Работает скрипт, происходит событие.
Скрипт прерывается и включается обработка? А потом скрипт продолжает работу?
Все события работают в основном потоке терминала. таким образом пока что-то делается в каком-то событии, в терминале ничего не происходит. Он даже может повиснуть.
Цитата
Viktor MMM пишет:
Как сделать так, чтобы пока, например, функция не выполнится, обработка не выполнялась? В тех случаях, когда мне так надо.
Этот вопрос совершенно не понятен.
Вы имеете в виду, чтобы "пока код в событии работает, функция main останавливала работу"?
 
Сергей, спасибо что отозвались.
Нет.
Происходит событие. Вы говорите, что терминал подвисает и начинает его обрабатывать.
Мне же надо, чтобы при возникновении события сначала доработала какая -то моя функция, а потом уже пошла обработка события. Причем по моему выбору. В каких-то для меня критичных местах. То есть не код в событии продолжал работать, а, например, тот же main. Доработал бы до какого-то места, а потом бы разрешил обработать событие. Это возможно?
 
я мог бы конечно отсечь влияние событий глобальным флагом, но хотелось бы, чтоб событие не терялось а в очередь вставало и отработало в итоге.
 
Цитата
Viktor MMM пишет:
Происходит событие. Вы говорите, что терминал подвисает и начинает его обрабатывать.
Мне же надо, чтобы при возникновении события сначала доработала какая -то моя функция, а потом уже пошла обработка события. Причем по моему выбору. В каких-то для меня критичных местах. То есть не код в событии продолжал работать, а, например, тот же main. Доработал бы до какого-то места, а потом бы разрешил обработать событие. Это возможно?
Вы можете установить на входе и выходе своей функции какую-нибудь переменную флаг, и пропускать обработку событий пока флаг не примет нужного значение.
Цитата
Viktor MMM пишет:
я мог бы конечно отсечь влияние событий глобальным флагом, но хотелось бы, чтоб событие не терялось а в очередь вставало и отработало в итоге.
Это нельзя сделать, так как появление очереди приведет к полному отказу в работе терминала.
 
Цитата
Sergey Gorokhov пишет:
Это нельзя сделать, так как появление очереди приведет к полному отказу в работе терминала.
Вроде же разрабы говорили, что события встают в очередь и хронология не меняется. Значит очередь эта возникает. Что подразумеваете под "полным отказом"? просто подвисает?
 
Виктор,
На Ваш вопрос, можно ли застопроприть событие так, чтобы накопиться очередь, а потом она продолжилась, то ответ можно, включив бесконечный цикл в событии. Но это приведет к зависанию всего терминала.
Если Вам нужно обрабатывать данные которые поступили за время работы функции main без зависаний, используйте стороннее хранилище поступающих данных
 
приведите весь код.
Цитата
Sergey Gorokhov пишет:
Мне же надо, чтобы при возникновении события сначала доработала какая -то моя функция, а потом уже пошла обработка события.
используйте корутины.
Цитата
Viktor MMM пишет:
Работает скрипт, происходит событие.
чьё событие? квиковский коллбек? или ваш?
 
Цитата
Viktor MMM пишет:
Вроде же разрабы говорили, что события встают в очередь и хронология не меняется.
По поводу очереди событий здесь.
Надо делать так, как надо. А как не надо - делать не надо.
 
а вообще - Michael Bulychev  мог бы, действительно и подробно расписать механизм работы событий в квике. Уверен, что это никак бы не отразилось на "коммерческой тайне", а наоборот - повысило бы понимание этого вопроса для пользователей и сократило бы кучу "глупых" вопросов и "догадок" на форуме. А также, уменьшило бы их стремление получить ответы на свои вопросы другими путями.
 
Добрый день.
В вашем случае можно данные из функций обратного вызова (OnOrder, OnTrade ...) складывать в одну или несколько очередей и обрабатывать данные в main(). В этом случае Вы сами будете контролировать порядок обработки данных.
 
Цитата
sam063rus пишет:
а вообще - Michael Bulychev мог бы, действительно и подробно расписать механизм работы событий в квике. Уверен, что это никак бы не отразилось на "коммерческой тайне", а наоборот - повысило бы понимание этого вопроса для пользователей и сократило бы кучу "глупых" вопросов и "догадок" на форуме. А также, уменьшило бы их стремление получить ответы на свои вопросы другими путями.
Добрый день.
Вроде уже все было описано достаточно подробно. Интересует что-то конкретное?
 
Цитата
Michael Bulychev пишет:
Добрый день.
В вашем случае можно данные из функций обратного вызова (OnOrder, OnTrade ...) складывать в одну или несколько очередей и обрабатывать данные в main(). В этом случае Вы сами будете контролировать порядок обработки данных.
День добрый, Михаил!
Не могли бы Вы натолкнуть на способ такого складывания?
sam063rus, спасибо, но корутины пока выше моих возможностей.
 
Цитата
Viktor MMM пишет:
Не могли бы Вы натолкнуть на способ такого складывания?
Имеется в виду создать таблице t={} и добавлять в нее элементы которые не успели обработать.
А после обработки очищать ее.
 
Понял, попробую так, спасибо.
 
Цитата
Sergey Gorokhov пишет:
Имеется в виду создать таблице t={} и добавлять в нее элементы которые не успели обработать.
А после обработки очищать ее.
Sergey Gorokhov, отметьте также об отсутствии потокобезопасности предложенного вами способа. А то ведь ещё один человек по этим "граблям пройдётся".
Надо делать так, как надо. А как не надо - делать не надо.
 
Цитата
Серж пишет:
Sergey Gorokhov , отметьте также об отсутствии потокобезопасности предложенного вами способа. А то ведь ещё один человек по этим "граблям пройдётся".
да ладно, а как же
Потокобезопасные функции для работы с таблицами Lua
Цитата

Одновременная работа с таблицами из функций обратного вызова скрипта и функции main() может приводить к неопределенным ситуациям. Для решения этой проблемы qlua.dll предоставляет потокобезопасные аналоги стандартных функций Lua.

Формат вызова потокобезопасной функции совпадает с форматом вызова аналогичной стандартной функции Lua.

В таблице представлены стандартные функции Lua и соответствующие им потокобезопасные аналоги:

Стандартная функция Lua  
concat  
remove  
insert  
sort  

Потокобезопасная функция
sconcat  
sremove  
sinsert  
ssort  

взято из документации QLUA.chm
 
Цитата
Sergey Gorokhov пишет:

Цитата

...
Потокобезопасная функция
sconcat
sremove
sinsert
ssort

взято из документации QLUA.chm
Сергей,сейчас поиском в QLUA.chm поискал эти функции - не  нашел. Может такое быть, что у меня справка не полная?
Квик  6,16,0,42 только что обновил.
 
Цитата
Viktor MMM пишет:
Квик6,16,0,42 только что обновил.
Эти функции описаны начиная с версии 6.17
Также актуальная документация есть по ссылке:
http://www.quik.ru/depot/quik_lua.zip
 
Цитата
Sergey Gorokhov пишет:
взято из документации QLUA.chm
Пардон, не видел: здесь об этих функциях ни слова, в quik_6_17_1_upd.zip вообще отсутствует WhatsNew.
Надо делать так, как надо. А как не надо - делать не надо.
 
Спасибо! а работать они будут тоже с версии 6.17?
 
Цитата
Серж пишет:
Пардон, не видел: здесь об этих функциях ни слова, в quik_6_17_1_upd.zip вообще отсутствует WhatsNew.
Эти функции были и раньше, d 6.17 просто добавили их описание.
Поэтому это НЕ новый функционал. соответственно в список он не попал
 
Цитата
Viktor MMM пишет:
Спасибо! а работать они будут тоже с версии 6.17?
Эти функции были и раньше, то есть на 6.16 тоже работать будут
 
Да, я понял по предыдущему сообщению, спасибо, Сергей!
Страницы: 1
Читают тему
Наверх