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

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

Страницы: Пред. 1 2 3 4 5 6 7 8 9 10 11 ... 81 След.
Индикатор с большим числом линий.
 
Цитата
Nikolay написал:
Проблема в этом  https://disk.yandex.ru/i/-GHF6orcG8COlA

Впрочем, не исключаю, что возможно требуется техническая чистка терминала, т.к. этот комплект обновлятся с 7-ой версии. Но назвать это нормальным сложно.
Предположу, что У Вас большой архив данных.
Попробуйте установить QUIK в новую папку.
В итоге архив будет не более 3т свечей.
Вызов getDataSourceInfo() из Init() в Lua индикаторах
 
Артем,
Можете пояснить, почему надо именно в Init найти код инструмента.
Индикатор с большим числом линий.
 
Nikolay,
Ваш тест, добавил вывод в лог
Код
name= "test_lines"
lines = 100
Settings = {}
Settings.Name = "*"..name
Settings.price = 66960
Settings.delta = 1.0

path = "D:/QUIK_SCRIPT/"
local fn=path..name..".txt"
Log=io.open(fn,"w")

function Init()
   Settings.line = {}
   for i = 1, lines do
       Settings.line = {}
       Settings.line = {Color = RGB(185, 185, 185), Type = TYPET_BAR, Width = 2}
   end
   return lines
end

function OnChangeSettings()
   Init()
end

function OnCalculate(index)
   if index < Size() then return end
   local x=os.clock()
   for i = 1, lines do
       SetRangeValue(i,index-100, index-1, Settings.price-i*Settings.delta);
   end
   Log:write("index="..index..","..x..","..os.clock().."\n"); Log:flush();
   return
end

Вот результат работы Вашего теста:

Я вывел в Log время построения линий
вот что получил
------------------
index=127,1287.011,1287.012
index=127,1287.021,1287.022
----------------
Т е все линии выводятся 1 ms.
Версия qUIK 12.4.0.38.
Все правильно?
Какие проблемы?
Индикатор с большим числом линий.
 
интервал любой .
Индикатор с большим числом линий.
 
Цитата
Nikolay написал:
Все же эта тема посвящена конкретной технической проблеме терминала.
На демо сервере  версия 12.4.0.38  Ваш тест работает мгновенно.
Индикатор с большим числом линий.
 
Цитата
Nikolay написал:

local lines = 100

Settings = {}
Settings.Name = "*test_lines"
Settings.price = 66960
Settings.delta = 1.0

function Init()
   Settings.line = {}
   for i = 1, lines do
       Settings.line = {}
       Settings.line = {Color = RGB(185, 185, 185), Type = TYPET_BAR, Width = 2}
   end
   return lines
end

function OnChangeSettings()
   Init()
end

function OnCalculate(index)
   if index < Size() then return end
   for i = 1, lines do
       SetRangeValue(i, index-100, index-1, Settings.price-i*Settings.delta)
   end
   return
end
попробую Ваш пример потестить.
Индикатор с большим числом линий.
 
Поясняю. Вы стрите индикатор на 99 значений закрытых свечей плюс один тик текущей свечи.
Какой в этом смысл.
Полагаю, что у вас индикатор не изменяется назад на 99 свечей на каждом тике текущей свечи.
Индикатор с большим числом линий.
 
Зачем строить индикатор назад на каждый тик?
Индикатор с большим числом линий.
 
Цитата
Nikolay написал:
 SetRangeValue(i, index-100, index-1, Settings.price-i*Settings.delta)
В примере каждый раз выводится 100 значений 100 линий. Это 10 000 вызовов функции SetRangeValue, в которой есть вычисления на луа.
OnCalculate(index)  вызывается на каждый тик.
В результате у Вас цикл не успевает завершится до получения нового тика.
--------------------------
Попробуйте измерить время вывода одного значения, чтобы понять где тормозит.
Заявка закрыта пользователем, Заявка закрыта пользователем или программой
 
Цитата
Игорь_С написал:
Спасибо. Позвольте уточнить, все заявки выставлены программно, скриптом. Некоторые из них затем сняты программно, некоторые человеком. Можно ли средствами QLUA определить, какая из   заявок снята пользователем, вручную., не обращаясь к брокеру.  
Можно, например так.
Если заявка снята (пришел колбек), а скрипт не посылал транзакцию на ее снятие, то это либо руками, либо брокер.
Индикатор с большим числом линий.
 
Пример не совсем тот.
В примере  Вы выводите значения с функциями Lua.
Это н совсем то, когда вывод делается с помощью return ... значения индикаторов.
-----------------------  
Для чистоты эксперимента сделайте вывод значений через return.
-------------------------
У меня 42 индикатора.
Отображаются практически мгновенно.
Версия 8.7.1.3
QUIK на VPS
 
Предположу, что разместив QUIK на VPS ,
Вы решили проблему надежности соединения  и безотказность работы, если эти проблемы у Вас были.
--------------------------
Но при этом быстродействие торговли у Вас осталось на том же уровне, что и при торговле из дома.
 
QUIK на VPS
 
Цитата
yiv1 написал:
Не знал о таком функционале. С чем можно сравнить чтобы понять "хорошие" или "плохие" показатели?
С тем же, но из дома.
----------------  
У Вас пинг из дома меньше, чем задержка в QUIK VPS.
----------------------------
Задержка в QUIK - отражает реальную  задержку обслуживания Вас сервером брокера.
QUIK на VPS
 
Цитата
yiv1 написал:
из дома
Код
  ping q2.finam.ru

Обмен пакетами с q2.gslb - tt.finam.ru [ 78.41 . 199.16 ] с  32  байтами данных:
Ответ от  78.41 . 199.16 : число байт =  32  время =  7 мс TTL =  245 
Ответ от  78.41 . 199.16 : число байт =  32  время =  7 мс TTL =  245 
Ответ от  78.41 . 199.16 : число байт =  32  время =  7 мс TTL =  245 
Ответ от  78.41 . 199.16 : число байт =  32  время =  7 мс TTL =  245   

с VDS
Код
  ping q2.finam.ru

Обмен пакетами с q2.gslb - tt.finam.ru [ 78.41 . 197.17 ] с  32  байтами данных:
Ответ от  78.41 . 197.17 : число байт =  32  время =  2 мс TTL =  246 
Ответ от  78.41 . 197.17 : число байт =  32  время =  1 мс TTL =  246 
Ответ от  78.41 . 197.17 : число байт =  32  время =  3 мс TTL =  246 
Ответ от  78.41 . 197.17 : число байт =  32  время =  1 мс TTL =  246   

А какую задержку показывает  QUIK в информационном окне  на VDS?
QUIK на VPS
 
Цитата
yiv1 написал:
RAM: 6144 MB
NVMe: 50 GB + постоянный backup на 50гб
Процессор: Intel Xeon E312xx (Sandy Bridge, IBRS update)   2.59 GHz (процессоров: 2)
Технологии процессора: MMX, SSE (1, 2, 3, 4.1, 4.2), SSSE3, EM64T, AES, AVX

По картинке: 1 ядра хватит, 1 гб оперативки не хватит, 10 гб не хватит

QUIK может до 2гб оперативки использовать. Среднее потребление всех процессов в системе - 4,6гб
Из 50 гб места занято на ~35гб, из них 20-25гб занято операционной системой (Windows Server 2016 с интерфейсом)
Процессор загружен в среднем только на 5%, большую часть времени отдыхает.
Благодарю.
Какая величина задержки обмена QUIK и время пинга с сервера до биржи и из дома до биржи.
Ошибка: транзакция не прошла проверку сервера QUIK, транзакция не прошла проверку сервера QUIK...
 
Цитата
Деус написал:
В общем может кому-то поможет, ID транзакции это любое число, но у него есть ограничение в 32 бита а это значение ограничено числом -2147483648 до 2147483647  выше это ошибка и квик жалуется на это . Многие рандомайзеры или еще какие вещи которые вы используете в качестве Id могут генерить число выше этого значения.  ЛУА:   local trans_id = tostring(os.time() % 100000000) ,  Питон:now = datetime.now().isoformat()
   trans_id = str(int(datetime.now().timestamp() % 100000000)) . В тех поддержки  ВТБ мне тоже не ответили сказали к разработчикам Квика идти :)
Разработчики перешли на Lua 5.3   именно потому, что ID стало 64 бит.
QUIK на VPS
 
Цитата
yiv1 написал:
Так как есть полный контроль над ОС, можно собирать любые dll любыми способами на любом языке.
Благодарю за информацию.
------------
Можете подробнее рассказать о затратах памяти и диска.
Вот на этом можно установить , то что у Вас. Если нет, то чего не хватает?
Замечания по реализации в QUIKе обработки заявок (и, наверное стоп-заявок).
 
Цитата
Nikolay написал:
Судя по всему речь про реализацию колбеков как таковую. Сейчас - это просто триггер на любое изменение, без фильтров, что максимально быстро.
А если делать фильтры, то уже всё усложняется - какие фильтры, почему такие, а не иные и т.д.

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

Что-то типа такого:

local on_param = SubscribeOnParam({'SBER', 'GAZP', 'SiU5'}, {'LAST', 'BID', 'OFFER'})

Т.е. мне не интересны другие коды и параметры. И таких подписок делать много, вплоть до одного инструмента, параметра.

Пусть эта реализация будет внутри терминала, и не влияющая на получение информации. Например, поток данных заходит в очередь, а сформированные колбеки её разбирают. Желательно отдельным потоком.
И так для любых таблиц терминала.

Но это, как говорится, совсем другая задача. Кодировка до сих пор 1251, чего уж говорить об этом.
Сейчас колбеки реализованы очень просто.
Перед обработкой пришедших данных  из глобальной таблицы скрипта вызывается функция колбека, если она есть, и ей передаются параметры. т е все затраты - это вызов функции. Никакой обработки нет.
Вы же предлагаете Все переделать ( добавить поток решать вопрос синхронизации нового потока с существующими и т д)
Но брокерам этого не надо.  А софт QUIK покупают брокеры.
Окончательное решение вопроса с getQuoteLevel2. Вопрос к разработчикам QLua, Нужно, наконец, что-то исправить?
 
Чтобы проверить что возвращает проверьте тип возвращаемого значения ( поставьте вывод типа в лог файл)
Окончательное решение вопроса с getQuoteLevel2. Вопрос к разработчикам QLua, Нужно, наконец, что-то исправить?
 
Цитата
Serge123 написал:
Помнится, я уже спрашивал об уточнении док-ции по getQuoteLevel2... Надо, наконец уточнить: что возвращается в случае, если отсутствуют bid/offer? Это таблицы, поэтому логично возвращать nil. А в док-ции написано, что возвращается пустая строка. Если это так, то это бардак... Только что посмотрел описание этой функции в QLUA.chm (дата файла аж 2023 г.!) последней версии Quik. А между тем, ещё в 2016 г. запрос, якобы, начал рассматриваться: https://forum.quik.ru/forum10/topic1502/

Видимо, придётся самостоятельно проверять, что там возвращается: nil (NULL или 0 на Си) или ссылка на "". Но чтобы это проверить, нужно ждать конца вечерней сессии в 23:50. Он выглядит так (2 варианта):

LQDT 23:49:58.307148 1.7176 22500 S
LQDT 23:49:58.424402 bids=4 1.7176/1179206774 1.7175/250690921 1.7174/500699896 1.7173/25069269 offers=4 1.7177/1537813336 1.7178/250179065 1.7179/500099511 1.7180/25340331
LQDT 23:49:58.959725 bids=4 1.7176/1179206578 1.7175/250690921 1.7174/500699896 1.7173/25069269 offers=4 1.7177/1537813336 1.7178/250179065 1.7179/500099511 1.7180/25340331
LQDT 23:50:02.061765

LQDT 23:49:57.962624 1.7186 4123207 S
LQDT 23:49:58.135088 bids=4 1.7186/1617425408 1.7185/251421812 1.7184/500029766 1.7183/25120559 offers=4 1.7187/1717726036 1.7188/250272256 1.7189/500201784 1.7190/25105969
LQDT 23:50:00.054763 bids=4 1.7186/1617425408 1.7185/251312612 1.7184/500029766 1.7183/25120559 offers=4 1.7187/1717726036 1.7188/250272256 1.7189/500201784 1.7190/25105969
LQDT 23:50:02.097119

В последних строках как раз надо выяснить, что именно возвращает getQuoteLevel2.

По идее, с этой целью можно также проверять строки
bid_count, offer_count
на символьный 0.

И ещё: моя программка на обработку
Код
  static int forLua_OnAllTrade(lua_State  * L)  
тратит 6500 тактов ЦП, а на вызов
Код
  static int forLua_OnQuote(lua_State  * L)
 {  .. . 

  lua_getglobal(L,  "getQuoteLevel2" );
  lua_insert(L,  1 ); // Используем код класса и тикер, которые уже сидят в стеке
  lua_pcall(L,  2 ,  1 ,  0 );
  
тратит 202 000 тактов!! Нельзя ли как-то ускорить работу getQuoteLevel2?

Может быть, кто-то из программистов предложит ускорение? Я склоняюсь к тому, чтобы во время большой нагрузки на Quik не вызывать getQuoteLevel2, если с момента предыд. её вызова прошло мало времени.
Измерьте сколько затрачивает время каждый из операторов
lua_getglobal(L,  "getQuoteLevel2" );  lua_insert(L,  1 ); // Используем код класса и тикер, которые уже сидят в стеке
 lua_pcall(L,  2 ,  1 ,  0 );
а также пустая функция
static int forLua_OnQuote(lua_State  * L)
Тогда можно сказать как ускорить и на сколько.
Замечания по реализации в QUIKе обработки заявок (и, наверное стоп-заявок).
 
Возможно,  причина в том, что запись в таблицу заявок производится после выхода из колбека. Поэтому, если обратится к таблице  заявок в колбеке, то там будут старые данные. Т е при снятии заявки в таблице заявка будет еще активной, а в колбеке - пассивной.
Некорректно работает скрипт, обнуляется на срочном рынке
 
Цитата
ВикторС написал:
Цитата
nikolz написал:
если выложите скрипт, то могу посмотреть что не так.
nikolz, Было бы здорово...)))
выложите на  обменник или в облако и пришлите ссылку в личку или зип файл на форум, но это для всех.
Некорректно работает скрипт, обнуляется на срочном рынке
 
Тоже торгую в сбербанке, но проблем нет.
Некорректно работает скрипт, обнуляется на срочном рынке
 
Цитата
ВикторС написал:
Цитата
nikolz написал:
Попробуйте открывать квик в одно и тоже время. Например, за 5 минут до начала утренних торгов.
nikolz, Попробую...один черт Сбер изгадил автоматическую торговлю и приходится вставать к началу утренней сессии. Спасибо за совет.))
Я давно уже на QPILE не пишу, но если выложите скрипт, то могу посмотреть что не так.
Некорректно работает скрипт, обнуляется на срочном рынке
 
Цитата
ВикторС написал:
Цитата
Anton Belonogov написал:
Если проблема с отображением линий на графике сохраняется, просим прислать на нашу почту   quiksupport@arqatech.com   скриншоты, иллюстрирующие проблему
Да я уже плюнул на отображение линий на графике. меня больше интересует почему у меня данные по сделке то подтягиваются в таблицу скрипта в начале утренней сессии, то не подтягиваются. Причем нет никакой закономерности. Скрипт может неделю работать без показа данных, а может пару дней показывать данные о сделке. Ну, вроде, не может программный код то работать, то не работать...Или может?
Попробуйте открывать квик в одно и тоже время.
Например, за 5 минут до начала утренних торгов.
Отображение фандинга для вечных фьючерсов., Как посмотреть знак фандинга?
 
и на индекс положительный:

остальное смотрите сами.
Отображение фандинга для вечных фьючерсов., Как посмотреть знак фандинга?
 
Для вечных фьючерсов на акции действительно положительный:

Отображение фандинга для вечных фьючерсов., Как посмотреть знак фандинга?
 
Пардон, ошибся. Я про фьючерсы на акции.
Отображение фандинга для вечных фьючерсов., Как посмотреть знак фандинга?
 
Цитата
Цитата
Юрий написал:
Фактически фандинг — это механизм встроенного арбитража, разница между спотом и фьючерсом.
Если ставка финансирования положительная: Цена контракта выше спотовой цены актива - Лонгисты платят шортистам.
Если ставка финансирования отрицательная: Цена контракта ниже спотовой цены актива - Шортисты платят лонгистам.

Слежу за значениями фандинга четырёх инструментов уже месяц - значения всегда  положительные ! Отрицательное значение вообще  НЕ  случаются?
Т.е. вечные фьючерсы противопоказаны для покупки  в лонг ? Такое ощущение, что народ даже не догадывается про это.... Или я ошибаюсь...
Если я не ошибаюсь, то вечных фьючерсов всего два.
с октября 2024 года на Московской бирже представлены вечные фьючерсы на акции Сбербанка (SBERF) и «Газпрома» (GAZPF)
------------------  
Вы за какими четырьмя следите?
Отображение фандинга для вечных фьючерсов., Как посмотреть знак фандинга?
 
Цитата
Юрий написал:
В таблице текущих торгов фьючерсов указывается величина Ставки переноса (фандинг) см. файл
Непонятно с каким знаком эта величина в момент переноса в 18:50.
Где можно смотреть знак фандинга положительный или отрицательный?
Обычно плюс не пишется перед числом. Что не так?
QUIK на VPS
 
Пока решил поставить робота на мини ПК:

Потребление не более 10 Вт.
Для автономной работы можно поставить аварийный источник питания
Получится свой дата-центр.
Некорректно работает скрипт, обнуляется на срочном рынке
 
Цитата
ВикторС написал:
Цитата
nikolz написал:
Вернитесь на 8 и будет счастье.Я торгую на 8.7.1.3
nikolz, Знать бы как, сам бы на неё вернулся
Когда ставите новую версию с сайта брокера, то в  папку backup  пишется архив предыдущей версии  (папка с именем даты например 20250312) Найдите дату когда заменяли 8 версию.
Для эксперимента сначала сохраните текущий QUIK в zip.
Потом при закрытом QUIK скопируйте содержимое папки из backup в папку QUIK
и запустите QUIK.
------------------------------------
Иногда возникает  потеря настроек или потеря истории.  
QUIK на VPS
 
Добрый день,
Вопрос к разработчикам и знатокам.
Хочу поставить торгового робота c возможностью ручной торговли на VPS.
QUIK или что-то подобное вполне устроило бы.
робота могу написать на любом языке, но предпочитаю С и Lua.
----------------------
Какое решение можете посоветовать.
-------------------
Какие требования к железу. Если есть что-то в интернете просьба дать ссылку.
Некорректно работает скрипт, обнуляется на срочном рынке
 
Вернитесь на 8 и будет счастье.
Я торгую на 8.7.1.3
Пытался ставить и 10 и 11 и 12 но все они что-нибудь да косячат.
всегда возвращался на 8.7. Работает как АК.
Странные случаи при торговле акциями на мосбирже
 
1) https://fin-plan.org/blog/premarket-na-birzhe
2)  Да, маркет-мейкер может подать заявку раньше, чем контрагент по сделке. Это называется пассивной сделкой и предусмотрено договором между маркет-мейкером и биржей. За такие действия маркет-мейкер получает вознаграждение.

Деятельность маркет-мейкера регулируется законодательством, в частности законом №325-ФЗ «Об организованных торгах».

https://invest-space.ru/interpretations/marketmeyker

Amibroker работа с переменными, Перезапись значения переменной
 
https://amibroker.com/guide/a_userfunctions.html
Выставление стоп-заявки на пробой, Стоп-заявки на пробой
 
Цитата
Alena Mishina написал:
Здравствуйте, владимир_!

Описанная вами ситуация показана на скриншоте (пример того как бы выглядела такая заявка).
 

У нас также есть инструкция по работе с условными (стоп-) заявками, доступная по  ссылке .
Полагаю,что это не то.
Человек хочет выставить шорт, когда цена ото текущей 8300 дойдет до 8400.
Т е это заявка типа тейк-профит.   Т е ему надо продать акции без наличия их у него в момент когда цена вырастет до 8400.
--------------------------
А Вы предлагаете стоп-лимит.  
onDepolimit, Формат данных, возвращаемых onDepoLimit
 
Предположу следующее
транзакция выполнена - это правда, так как заявка доставлена без ошибок в ней и принята биржей
но заявка не выполнена и причина указана в ответе.
Что не так?
trade_account_id для ИИС счета, как получить trade_account_id для ИИС счета?
 
Цитата
Xrou написал:
QuikPy
если вы используете это
https://github.com/cia76/QuikPy
то там есть ссылка на сайт
Внешний вид
 
Цитата
Вадим написал:
Цитата
funduk написал:
Редактирование настроек графика - Диаграмма - Внешний вид - Порядок отображения слоёв данных
Не помогло, разные выбирал слои вверх, или какой нужно?
в конце поставить вертикальные линии и метки
Проблема при вызове getParamEx внутри OnParam, getParamEx внутри OnParam не возвращает значения
 
Полагаю следующее:
Если onParam вызван по факту получения нового "TQBR", "SBER", "LAST",
то это новое значение будет помещено в таблицу после  выхода из onParam.  
-----------------------------
Поэтому getParamEx("TQBR", "SBER", "LAST")  вернет это значение лишь после выхода из  onParam.
---------------------------
Надо читать новые параметры в main, а не в колбеке.
Как отлаживать скрипты?
 
Цитата
Сергей Че написал:
Цитата
funduk написал:
QUIK активно противодействует отладке, падая при любом подключённом отладчике.
Я так понял, что лучший вариант из доступных -- это просто писать в лог в нужном месте скрипта.
верно
Что-то с сайтом не так.
 
Сегодня при попытке зайти на Ваш сайт получаю это:
Для писателей роботов
 
Цитата
Saturn написал:
Цитата
А API MOEX позволяет получать доныне о сделках в реал-тайме или только исторические данные ?
API MOEX позволяет получать доныне о сделках в реал-тайме но платно, или с задержкой 15 минут.
Пример на луа см здесь:
https://forum.quik.ru/forum17/topic9087/
Ошибка снятия заявки. [GW][3] "Сейчас эта сессия не идет."
 
Цитата
Владислав написал:
Добрый день!
При попытке снять заявку возникла ошибка: Ошибка снятия заявки. [GW][3] "Сейчас эта сессия не идет."
При этом ни OnOrder, ни OnTransReply небыли вызваны.
Как роботу понять что произошла ошибка снятия конкретной заявки, если колбеки не вызываются?
простой вариант решения проблемы - проверка наличия активных заявок по таблице заявок.
-------------------------
Я для этого формирую специально таблицу активных заявок.
В этой таблице отмечаю состояние заявки.
1) активная
2) отправлена транзакция на снятие
------------------------
Пассивная заявка удаляется из таблицы.
Какой тип заявки при выборе в меню "Новая заявка F2"
 
Цитата
edw написал:
в заявке поле Цена редактируемое, т.е. я могу при покупке ниже тек.цены указать нужную мне цену, т.е. выставить лимитную заявку на покупку?
да
При запусках коллбеков не восстанавливается состояние скрипта по сборке мусора (QUIK 12.2.1.2)
 
Цитата
paluke написал:
Цитата
nikolz написал:

Т е в каком стеке Вы вызовите сборщик, тот стек он и будет чистить.
Динамическая память - это не стек. Или имелся ввиду поток? Ну мы же можем передавать объекты между потоками. Не может быть разделения по потокам для сборки мусора.
Цитата
Each Lua state has one or more threads, which correspond to independent, cooperative lines of execution. The type  lua_State  (despite its name) refers to a thread. (Indirectly, through the thread, it also refers to the Lua state associated to the thread.)  
Возможно путаница в терминологии.
Глобальным стеком я называю lua_State.
-----------------------
VM Lua - это стековая машина.
Когда мы создаем VM Lua, то для нее выделяется область State
--------------------------
Т е для нее из кучи выделяется кусок, в котором все размещается.
Если вызвать функцию библиотечную, то этой функции на СИ  передается всего один параметр.
Это указатель на State VM Lua.
---------------------------
Все функции и все переменные как глобальные так и локальные  размещаются в этом State.
Т е этот State и есть та динамическая память, с которой работает сборщик мусора.
---------------------------
когда создаем корутину, то для нее из области State VMLua выделяется кусок памяти, который будет State корутины.
-----------------------
"coroutine.create (f)Создает новый сопроцесс, с телом f. fдолжен быть функцией. Возвращает этот новый сопроцесс, как объект с типом "thread".
----------------------

lua_State *lua_newthread (lua_State *L);

Создает новый поток, ложит его на стек и возвращает указатель на lua_State, который представляет этот новый поток.

Новый поток использует одно глобальное окружение с оригинальным потоком, но имеет независимый стек исполнения.

Не существует явной функции для закрытия или уничтожения потока. Потоки это субъект для сборки мусора, как и любой Lua объект

-----------------------------  

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

При запусках коллбеков не восстанавливается состояние скрипта по сборке мусора (QUIK 12.2.1.2)
 
Цитата
TGB написал:
collectgarbage('isrunning'
Посмотрите на вызов функций в API C
В качестве параметра в функцию передается указатель на стек.
Когда Вы вызываете сборщик мусора в main, то сборщику будет передан указатель на локальный стек корутины.
Когда вы вызываете сборщик мусора в колбеке, то сборщику передается указатель на глобальный стек основной VM Lua.
----------------
Т е в каком стеке Вы вызовите сборщик, тот стек он и будет чистить.
При запусках коллбеков не восстанавливается состояние скрипта по сборке мусора (QUIK 12.2.1.2)
 
Сборщик мусора - это функция и она одна.
Но запускать ее можно с различными стеками VMLua.
-------------
Все функции выполняются в одном стеке.
------------------
Корутина main отличается тем, что для нее выделяется отдельный стенк из стека основной VM.
------------------
Если функцию например колбек вызвать, то ее переменные будут в глобальном стеке основной VMLua.
--------------
Если Вы вызываете функцию в Main, то ее переменные будут в стеке корутины.
------------------------
сборщик мусора собирает мусор в в стеке основном VM.
но при этом он не видит стек коррутины, так как это один объект в основном стеке.
---------------
Но тогда кто освобождает пространство от переменных внутри main?
Я полагаю что делается запуск сборщика для области стека корутины main.
---------------------
При запусках коллбеков не восстанавливается состояние скрипта по сборке мусора (QUIK 12.2.1.2)
 
TGB,
В качестве гипотезы, могу предположить следующее:
Возможно это связано с тем, что Вы проверяете сборщик в main.
Дело в том, что main - это корутина. В корутине свое адресное пространство для локальных переменных.
Колбек это основная VM там свое.
По логике должны действовать два различных сборщика мусора.
--------------------
Если мое предположение верно, то Вы пытаетесь останавливать один, а проверять другой.
---------------------  
Но я не поверял эту гипотезу, так как меня пока не волнует как работает сборщик в скрипте.  
Страницы: Пред. 1 2 3 4 5 6 7 8 9 10 11 ... 81 След.
Наверх