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

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

Страницы: Пред. 1 ... 5 6 7 8 9 10 11 12 13 14 15 ... 28 След.
Изменения в работе с колбеками LUA в новой версии
 
Цитата
Владимир написал:
Правильно предполагается!
Ну вот, теперь можно к конкретике. Таки юзер решил порешать задачу, которая будет решаться до 2089 года. Интерпретатор, допустим, через 30 секунд решил, что чот не то, его действия?

Цитата
Владимир написал:
Это никакая не "многозадачность" - работает ТОЛЬКО интерпретатор
Дык и на процессоре тогда никакая не многозадачность, работает только ядро, а выполняемые им опкоды это всего лишь пассивные байты, которые сами ничего не умеют.

Цитата
Владимир написал:
Какой Вы предлагаете "конструктор" для объектов класса "функция"?
Ну вот в луа например любимый loadfile как раз и есть конструктор объекта функция, он парсит глупый текст и превращает его в байткод. Если документацию на него почитать, там так и написано: If there are no syntactic errors, returns the compiled chunk as a function.
Изменения в работе с колбеками LUA в новой версии
 
Цитата
Владимир написал:
Интерпретатор нарывается на Wait, ставит В СВОЙ OnStop операцию возврата управления, И ЗАБЫЛ НАФИГ ПРО ЭТОТ СКРИПТ ВААПЩЕ! Только по прерываниям передаёт управление зарегистрированным там обработчикам (естественно, никакого "сканирования" для этого не требуется).
Предполагается, что интерпретатор работает в неком контексте и по неким "прерываниям" переключает контекст на зарегистрированный обработчик, дает ему доработать до победного и переключает контекст обратно. Это и есть кооперативная многозадачность, о которой говорили большевики. А юзер решил порешать задачу коммивояжера в обработчике. И все, вся система встала колом. Теперь интерптетатору надо прибивать этот скрипт, потому что асинхронно снять его контекст на полпути и потом снова в него войти он уже не может. То есть он может снять, что-то повыполнять другое и переключить контекст снова на этот скрипт, только для скрипта уже произошли неожиданные изменения в окружении (состояние стало volatile), на что он не рассчитывал, так что результаты его продолжения будут мусорными, а значит и продолжать его смысла уже нет, в морг значит в морг.

Цитата
Владимир написал:
Нашего потока в этом случае тупо НЕТ!
Давайте чуть модифицируем пример выше:
Код
function main()
 int magic = 123;
 SetInterrupt(OnTime, 1000, "MyHandler");
 Wait();
 print("%d\n", magic);
end

function MyHandler(v)
  table.insert(t, v)
  table.sort(t)
end
Мейн создал переменную, зарегистрировал обработчик и ушел ждать событий (как он думал), но на самом деле просто умер ("потока тупо нет"). После возврата из Wait поток реинкарнировался и хочет показать миру свою переменную. Это допустимый сценарий? Тогда вопрос - где в это время хранилась эта переменная? Отвечаю: она хранилась в контексте потока, который, оказывается, был таки жив, только снят с выполнения. Так выходит, разницы с этим wait и тем, что я выше показал, нет никакой, оба спят, только в моем переключением контекстов занимается винда (или другая ось), а в самопальном надо делать свой шедулер, свои стеки, свои потоки, свою  синхронизацию, свое вообще все.

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

Цитата
Владимир написал:
делать низшей единицей надо именно ПУСТОЙ объект!
Ну так о том и сказано было. Однако, чтобы быть сколько-нибудь полезным, этот пустой объект должен уметь: а) рождаться (конструктор); б) умирать (деструктор); в) опционально клонироваться (копирование/присвоение). Остальное добавится наследниками. И вуаля, в одной ветке мы изобрели исключения, в другой - классы и наследование. Все, что нам осталось, это синхронизировать терминологию с существующими решениями и подивиться, что вон же ж оно уже все было оказывается, только называлось по-другому.
Изменения в работе с колбеками LUA в новой версии
 
Цитата
Владимир написал:
за всё время моих занятий программированием я с таким толкованием ещё не встречался
Встречались-встречались, вот прям в этом самом квике (арка не смотрит?)
Код
while(true)
{
    if(PeekMessage(&msg, ...))
        ProcessMessage(&msg);
    else if(HaveNetworkEvents())
        ProcessNetworkEvents();
    else
        WaitMessage();
}
И 99% игрушек построено аналогично, только там WaitMessage вообще нет, они графику свою отрисовывают беспрестанно. Так и получается, сообщений нет, а деятельность бурная есть.

Цитата
Владимир написал:
Этот wait на практике будет реализован как передача управления основному потоку
Вы хотите солнце вручную закатывать. Тот поток и так отдельный, он прямо сейчас, может быть, на другом ядре выполняется вовсю. Нашему потоку надо просто встать и подождать сообщений, остальное разрулит винда. GetMessage, если сообщений нет, вызовет внутри тот же WaitMessage, а он встанет на WaitFor* до получения сообщений. Поток не будет вхолостую молотить цикл до победного, как можно подумать на первый взгляд, GetMessage блокируется. Явная передача конкретному потоку в винде вообще невозможна, мы можем только отказаться от своего процессорного времени, а кому его винда отдаст - неуправляемо.

Цитата
Владимир написал:
имелось в виду не видимый на экране прямоугольник
Ну это-то понятно. Винду надо было назвать Objects и сделать низшей единицей именно объект, не привязанный к экрану, а окно от него унаследовать. Они потом это осознали и сделали "окна только для сообщений", без всего экранного оверхеда. Но как костыль уже.
Изменения в работе с колбеками LUA в новой версии
 
Цитата
Владимир написал:
код мейна должен быть примерно такой
По сути в примере мейна просто нет. Это тот самый метатрейдер, о котором выше swerg писал. Этот wait на практике будет реализован как
Код
void Wait()
{
    while(GetMessage(&msg))
    {
      if(HandlerRegistered(msg.type))
        InvokeHandler(&msg);
    }
}
Цикл сообщений спрятан от юзера и больше никакой разницы с моим вариантом. А прятать, ящитаю, плохо. Событие "нет событий" тоже событие.

Цитата
Владимир написал:
хотя на момент отправления события адресат может вообще не существовать
Это жесть конечно.

Чесгря, про винду там неправды понаписали. Вот я тут автологин выкладывал, там очередь сообщений есть, а окна нет.
Изменения в работе с колбеками LUA в новой версии
 
Цитата
Владимир написал:
Если юзер ковыряется в своей песочнице
1) как он это определит? К каждой переменной ярлычок привесит, чья она, и будет при доступе проверять?
2) речь вообще не про это. А про что - про это? А вот про что
Код
t = { }

function OnAllTrade(v)
  table.insert(t, v)
  table.sort(t)
end

function main()
  while true do
    table.sort(t)
    sleep(100)
  end
end
Оно и сейчас даст кашу, но сейчас хоть потоки разные и можно хоть бы и колхозную синхронизацию налепить. А если они обе в мейне будут асинхронно выполняться, не будет даже теоретической возможности что-то там синхронизировать. Ну то есть будет путем реализации потоков в потоках (как бы их ни назвали), то есть очередного героического изобретения лисапедов.

Резюме: внутри потока смена контекста только кооперативная, сиречь синхронная. Никаких чудесных изобретений тут быть не может.
Изменения в работе с колбеками LUA в новой версии
 
Цитата
Владимир написал:
Это же ИНТЕРПРЕТАТОР!
...а не логический анализатор, именно. Он тупо буковку за буковкой выполняет и леса за деревьями не видит.
Изменения в работе с колбеками LUA в новой версии
 
Цитата
TGB написал:
при запуске любого скрипта сканирует его в поисках его же коллбеков
Не сканирует, луа уже выполнил тело скрипта и колбеки уже есть в глобальном пространстве, достаточно проверить например is_function('OnAllTrade'). В остальном разве что про OnStop можно в деталях поспорить, да незачем, модель тоже достаточно релевантная, если в дебри не лезть.
Изменения в работе с колбеками LUA в новой версии
 
Цитата
Владимир написал:
В УПОР не вижу здесь "способа быстро убиццо апстену".  
Никто не знает, что колбек сделает, поэтому все состояние становится volatile. Если при вызове из другого потока спасают локи, то при вызове из себя же не спасет ничто.
Изменения в работе с колбеками LUA в новой версии
 
Цитата
swerg написал:
каким образом останавливать обработку колбеков, когда автор скрипта уже не хочет чтобы колбеки вызывались?
Очевидно, способом OnSometh ing = nil. Квик все равно колбек под pcall дергает, ну получит попытку вызова нила, снимет флаг "есть такой колбек" и поедет дальше как ни в чем не бывало.

Хотя я б наоборот один мейн и оставил (и убрал синхронизацию из луа). Хочет мейн событиев - регистрирует колбек, который будет вызываться в его же контексте, а для этого на входе должна быть очередь и мейн должен периодически дергать что-нибудь типа ProcessEvents. Вариант "с прерываниями", как Владимир выше написал, то есть если колбеки в потоке мейна выполняются асинхронно с ним самим, это путь в адъ, это как сигналы в сях, способ быстро убиццо апстену. Винда вон даже APC асинхронно не обрабатывает, хотя могла бы (контрольный вопрос: почему?).

Тксть тоже принял участие в народных мечтаниях в меру сил.
Доступные скрипты, Некорректное поведение в режиме "Показывать на всех вкладках"
 
Цитата
s_mike@rambler.ru написал:
технических проблем вот так сходу не вижу
А я навскидку вижу следующие:
1) после dofile надо будет откатить глобальный скоуп в состояние до dofile. В принципе возможно.
2) тело скрипта и OnInit выполняются в контексте квика, пока поток main еще не создан, тут они будут в контексте проксирующего мейна выполняться.
3) квик определяет, какие колбеки будет дергать, после выполнения тела скрипта, перед вызовом OnInit и созданием мейна и потом свое мнение уже не меняет.
4) как быть с OnStop? Квик, раз уж его дернул, виснет до завершения или прибития мейна.
Предложение к разработчикам
 
Владимир,  а у мну вот LL(k) умирает уже на k = 7, а он всего лишь полиномиальный. КОНСТАНТЫ БОЛЬШИЕ, гыгы. Ну ладно, типа код нам показали, прекращаем дозволенные речи.
Предложение к разработчикам
 
Цитата
Владимир написал:
на стеках очередей событий
Эмм, события задом наперед обрабатываете? ) Стек это LIFO, очередь FIFO. Значит, это были очереди, тип данных такой, а не аппаратный стек. Ладно, тут прояснилось. На плюсах очереди имели бы деструкторы и тупой как пробка компилятор их бы тупо вызывал когда надо.

Цитата
Владимир написал:
А если мы вызываем функцию по указателю, причём в момент компиляции ни сама функция, ни количество и тип её аргументов В ПРИНЦИПЕ неизвестны?
Можете набросать, как это на практике выглядит? Ну вот есть указатель и говорят, что на функцию, больше не знают о ней ничего. И чо? Как можно вызвать ее, не зная ни calling convention, ни типов аргументов?

Цитата
Владимир написал:
Похоже, Вы ещё просто не сталкивались с реально сложными задачами.
От алгоритмиста это смешно звучит, типа слабо np-полную закодить? Не, мы лучше логарифмическое что-нибудь.
Предложение к разработчикам
 
Владимир,  у меня одна фраза только и вертится - "нафига, а главное зачем". У потока ОДИН стек. Какие свои указатели, каких стеков? Откуда они взялись? Кто-то их насоздавал вручную? Нафига? Зачем отслеживать локальные переменные функции, если компилятор это делает? "Параметры, передаваемые какому-либо уровню рекурсии" это про что вообще? Они одним способом только передаются - как аргументы функции, вызывается она рекурсивно или нет - без разницы, КАК ИМЕННО передаются и КАК ИМЕННО очищаются - это описано в ABI и все, точка, ничего не надо изобретать, надо взять документацию, прочитать и сделать, как там написано.
Функция getParamEx возвращает нули по параметрам максимальная, минимальная цена для акций, проблемы с переходом на новую версию qlua
 
Цитата
Старатель написал:
возвращать таблицу вида: {["Имя параметра"] = "Формальный заголовок", }
Так даже и поинтересней будет, возьмутся ли только делать. Насколько понимаю, оно все в одном из дат-файлов лежит, надо только достать и выдать юзеру, но кто знает, почему до сих пор не сделано, может там какие проблемы нерешаемые.
Предложение к разработчикам
 
Цитата
Владимир написал:
Который по SP?
Ну SP это когда было, уже и ESP не торт, теперь RSP. Таки да, на нем. Все состояние ПОТОКА определяется а) текущим содержимым регистров; б) текущим состоянием стека (до дна). Забрасываем регистры на стек и все, сняли стек - сняли все состояние ПОТОКА.

А ежли задача стоит снять ПРОЦЕСС, то его надо снимать так: посылаем ему сообщение "пора на выход" и ждем, пока он сам свое состояние в файлик сериализует. А при старте он этот файлик прочитает и восстановит состояние. Вот, не побоюсь этого сравнения, как квик окошки вспоминает, где какие были. Снять дамп извне и потом героически оживить франкенштейна - это занятно, может быть, особенно если хорошо оплачивается, только абсолютно бессмысленно.
Предложение к разработчикам
 
Цитата
Владимир написал:
Ха! НА КАКОМ, простите, стеке? А если у нас НЕСКОЛЬКО стеков (в частности, некоторые объекты могут иметь персональные стеки) - тогда как?
Конечно несколько, иначе что переключать-то. И как это на каком, на текущем. Вот который щас. Бабах на него все регистры, заменили указатель стека, дерг все регистры обратно и поехали.
Функция getParamEx возвращает нули по параметрам максимальная, минимальная цена для акций, проблемы с переходом на новую версию qlua
 
Цитата
_sk_ написал:
Зарегистрируйте тогда пожелание о возможности выгрузки формальных заголовков в обычный текстовый файл выбором пункта меню.
А давайте другого пожелаем, чтоб нам дали функцию в луа типа STRING getClassParameters(STRING classcode). А то как-то непорядочек, количество параметров в getClassInfo есть, а самих их негде взять.

Цитата
_sk_ написал:
LibreOffice не поддерживает эту давным давно устаревшую технологию.
Можно довольно простую программку сделать для приема дде-соединения ради только имен столбцов.
Предложение к разработчикам
 
Цитата
Владимир написал:
Вы должны иметь возможность в любой момент отложить её, и потом возобновить работу с отложенного места.
Это coroutine называется. В луа есть, полюбопытствуйте, всяко лучше, чем лисапеды.

Цитата
Владимир написал:
А вот как обойтись БЕЗ него - лично я без понятия!
А вообще это вот все, что хотите отложить, это контекст, и (говорим о нативном коде) сохраняется он элементарнейше на стеке, после чего стек заменяется на другой, из того стека восстанавливается ранее отложенный контекст и поехали дальше. То есть ровно так, как ось переключает потоки, только в юзермоде. В сях лонгджамп так и устроен, в винде для этого тоже штука есть, fiber называется. Как раз гоуту для таких целей не представляю как применить.

Цитата
Владимир написал:
У меня файл входных данных парсится, там в разных местах возможны разные ошибки в данных, некоторые из них критичные - я в таких случаях ругаюсь на юзера и закрываю скрипт. Проверок много, проверки разные, а реакция - одна, и она именно "блочная". И тут БАЦ - и полный облом! А если на группу разных проверок есть группа разных реакций?
Все логично, да. Сначала обозвали нехорошо исключения, потом начали их же изобретать на гоуту. В луа есть error('text'), вызываете и все.
Функция getParamEx возвращает нули по параметрам максимальная, минимальная цена для акций, проблемы с переходом на новую версию qlua
 
Цитата
_sk_ написал:
Не пора ли перенести эти описания в справку QLua и актуализировать?
Щас арка очень обидится, но логика в таком расположении справки есть и она проста: функция getParamEx в qlua - всего лишь обертка над аналогичной функцией из qpile. Соответственно и на вопрос про названия параметров в qlua ответ очевиден, никак они не называются, qlua о них вообще ничего не знает, кроме того, что параметров три и это строки.
Вопросы Новичка
 
Цитата
Владимир написал:
Мне показалось (не уверен - там ещё и другие сделки были), что в течение этого времени количество свободных средств у меня увеличивалось после каждой сделки (частичной продажи).
Не показалось, после каждой сделки и пересчитывалось. После (автоматического/ручного - неважно) снятия оставшиеся 4 лота вернулись на депо.
Вопросы Новичка
 
Цитата
agrevbethh написал:
тогда в чём заключаются условные заявки с включенной опцией до отмены? Когда они ставятся, при закрытой бирже можно выставить?
Вы смешали заявки (в первом вопросе), условные заявки (теперь), срок действия и момент выставления. Получилась, ожидаемо, каша. Разгребем.
1. Просто заявки попадают сразу на биржу, естественно ставятся только во время торгов, неисполненные автоматически снимаются в момент завершения торговой сессии. Об этом swerg и написал, т.к. вопрос был просто про заявки.
2. Условные заявки хранятся на сервере квика, при активации такой заявки сервер посылает простую заявку (как в п.1) на биржу, откуда следуют такие выводы:
2.1. Выставлять (и снимать) условную заявку можно в любой момент, когда работает сервер, независимо от состояния торговой сессии.
2.2. В отличие от простой заявки, условная может жить на сервере до морковкина заговения, поэтому у них есть и вариант до отмены, и вариант до заданной даты, и вариант до конца сессии.
2.3. Если по какой-то причине выставленная простая заявка будет отклонена биржей (не ведутся торги, превышен лимит, еще что-то), ваш стоп не исполнится. То есть условная заявка-то сработает, а результатом будет пшик.
Предложение к разработчикам
 
Цитата
Владимир написал:
А что же формат не вызывает напрямую сишную sprintf?
Вызывает, только формат-то у них не совсем сишный, поэтому сканируют сами и вызывают для каждого % отдельно.
isConnected и пара неприятных моментов
 
Цитата
Nikolay написал:
обладай бы мы полной информацией о смысле полученных данных, ошибках сервера (читай больше колбеков) в данный момент
Так и квик об ошибках сервера вряд ли знает. А биржевую инфу как только увидит, тут же дернет ваш колбек, даже раньше, чем сам инфой попользуется. С тем же клинапом, увидел квик новый идентификатор сессии и дернул OnCleanUp, потом почистил свои таблицы (тут вы ноль и поймали) и стал ждать, чего там нового приедет. Он бы может и рад вам сообщить что-нибудь еще, да сам не знает ничего. То же самое и сервер, ему от биржи приехало что-то, он это упаковал и отправил, он не знает, там еще очередь стоит или это последнее на сегодня и дальше будет только новая сессия в понедельник утром. В плане больше колбеков это да, еще несколько штук не помешало бы, да и существующие если бы чутка иначе работали и кое-какие гарантии давали, было бы удобнее. Тот же клинап если бы гарантировал, что вся предыдущая сессия, как она была сохранена, еще в полном виде имеется, было бы очень здорово. Равно как и после очистки если б что-нибудь дергалось с гарантией, что квик пустой от слова совсем.
Предложение к разработчикам
 
Цитата
Владимир написал:
тормозит тут не язык, а файл
Предлагаю Александру закомментировать запись в файл, но оставить форматирование строки для записи, и поделиться (удивительными) результатами. Ежли ему лень, поделюсь своими: 3 млн записей из ТВС пишутся в файл 30 секунд, в никуда - 29 секунд. Там под ковром io:write практически напрямую вызывает сишную fwrite, а она и сама кэширует, и потом еще винда кэширует, так что с файлами тормозов нет, покуда они не столь велики, чтобы начать кэш выдавливать. А ежли на SSD, то и потом еще полетает, пока и ему кэш не забьет.
Lua-таблицы. Интерфейс. Управление свойствами lua-таблиц., Как тонко настроить lua-таблицу? Механизмы взаимодействия пользователя с lua-таблицами.
 
Цитата
Денис написал:
1. Как
...
15. Как
Не знаю, насколько дельным мой совет покажется. На все как есть такой ответ: создать экземпляр экселя и в нем все это делать, из луа только данные писать/читать. Сферический в вакууме пример можно найти у майкрософта. Но придется длл писать, luacom вроде как уже не торт.
isConnected и пара неприятных моментов
 
Цитата
_sk_ написал:
Нет атомарности.
А ее и нет как таковой в реальности. Во-первых, мы, как астрономы, наблюдаем свет давно потухших звезд, только у тех световые годы, а у нас сетевые пинги. Во-вторых, оно все и на бирже не в одно ядро происходит, то есть буквально в неопределенном порядке. Был бы некий лок всей биржи, было бы здорово. Остановил время, осмотрелся, сделал что надо, запустил дальше. Но мы можем только сами создать себе "атомарность" путем сериализации событий и в каждый момент времени считать, что вот эта наша "последовательность восприятия" истинная и есть, учитывая, конечно, все вытекающие. На первый взгляд сериализация ничего не дает, но на самом деле у нас всегда одно конкретное состояние, пусть даже и не отражающее текущую действительность. Без сериализации вместо состояния имеем только его "волновую функцию". Например, отправили заявку на 100 лотов, сколько исполнено в данный момент? Приехало вроде "исполнено 3", но это было пинг назад, а может прямо сейчас уже 10, а может и все 100. Заявка Шредингера, ага. На самом деле весь мир таков, мы просто привыкли и не замечаем. Пошел за хлебом, а хлеба нет. Вчера в это время был, и позавчера был, а тут раз и нет. Волновая функция сколлапсировала не там, где обычно.
Предложение к разработчикам
 
Цитата
Владимир написал:
Уберите  jmp из ассемблера и попробуйте написать хоть что-нибудь
Строго говоря, jmp это такая же несуществующая вещь, как if, while, for и прочая. Для процессора (интела в данном случае) существуют EB, E9, EF и т.д., а на асме это все пишется как jmp. То есть ровно та же ситуация, что и с перечисленными аналогами, языковая конструкция - для человека, для процессора - опкод. В опкодах тоже писать можно, ежли без извращениев никак. Забавно, кстати, что в армах пытались сделать железный if, но чота выпилили в последней версии.

Конкретно в чистых сях, где все объявления вверху, goto вообще не страшен. В плюсах уже хуже, бо можно заскочить в блок, обойдя инициализацию локальных переменных, либо выскочить из блока, обойдя деструкторы (хотя вроде компиляторы теперь это ловят).
Обратный отсчет времени до следующей свечи на текущем таймфрейме
 
Цитата
Евгений написал:
И еще, простите за такой вопрос, но насколько безопасно использовать подобные дополнения?В теории, таким образом можно получить пароли, ключи, управлять торговлей?
В теории любой нативный код, запущенный на той же винде, что и квик, будь он хоть плагином для браузера, хоть дллкой для чего угодно, хоть игрой, может утянуть у вас ключи от квика. На практике не очень понятно, что потом с этими ключами делать. Посмотреть, скока у вас денех? Продать весь ваш портфель по рынку? Купить на все плечи акции бешбармачной из урюпинска? Скорей уж вам подсадят что-нибудь общесистемное, там хоть какие-то перспективы "полезного" использования могут быть.
Предложение к разработчикам
 
Цитата
Владимир написал:
goto я вообще не искал, ибо был уверен, что его давно уже выбросили всякие пижоны от программирования
Вы ж должны знать, что goto в общем случае формально недоказуем, поэтому когда надо предусловия/постусловия выводить, его и не используют, а не потому, что пижоны. Некоторые дейсктры думали, что без формального вывода это вообще не программирование, а тыканье букв наудачу, потому и удивлялись, кому goto нужен. Правда, они упускали момент, что их любимый формализм не единственный и в других формализмах, вроде конечных автоматов например, goto вполне себе место.
Предложение к разработчикам
 
Цитата
s_mike@rambler.ru написал:
Бросайте это гиблое дело.
++

Цитата
HTML,CSS,PHP,MQL4,MQL5
это ж фулхаус.
Как определить используемую версию версию синтаксиса lua в терминале ?
 
Цитата
Андрей написал:
Dll это не исполняемый файл интерпретатора. Скорее всего ЛУА зашит в код.
Луа это встраиваемый язык, поэтому длл как раз и есть луа. Консольный интерпретатор это пример хоста от авторов луа, чисто образец, как встраивать. Если какие-то сторонние IDE заточены на него, это минус авторам этих IDE.

Цитата
Андрей написал:
А вот что касается версий используемых библиотек, то у меня например 2 dll: 5,1 и 5,3. Какую из них и когда он подключает и, следовательно, могут ли этим вызываться ошибки и какие - это тайна за семью печатями.
Уберите из папки квика 5.1 и будет одна. Заодно увидите, что работать перестало (я не нашел ничего такого).
debugview - где его взять и как им пользоваться?
 
Цитата
Андрей написал:
на тормознутом DDE
Тормознутый эксель, когда формулы в листе есть, бо пересчитывает каждый раз. Сам по себе DDE порвет большинство способов обмена информацией в среде Винды. Кстати, не поясните, какие имеются в виду, куда арке погуглить (и мне тоже, мало ли)?

Цитата
Андрей написал:
предназначена для манипулирования финансовыми средствами в немалых объемах
Шутите? Для немалых объемов они другую софтину предлагают. И не только они.
Грядущие изменения на срочном рынке МБ: поддержка работы с 19-значными номерами заявок и сделок
 
Цитата
TGB написал:
Я его выслал поддержке QUIK без предоплаты.
Если речь о том тесте, что предлагался неоднократно всем и каждому, то лично мне (не арке; им, возможно, все понятно) непонятно, что он тестирует. Скажем, у мну есть длл, которая вместе с квиком уронит и винду с вероятностью 100%. Причем только в квике, в консольном луа той же версии ничего такого не случится. Можно ли подогнать под нее какое-нибудь обоснование и обвинить арку в чем-нибудь? Желательно, конечно, с предоплатой, но и с оплатой постфактум я тоже согласный.
Грядущие изменения на срочном рынке МБ: поддержка работы с 19-значными номерами заявок и сделок
 
Цитата
TGB написал:
Зря вы это написали.
Ничего нового не написал. С наличием в qlua косяков никто (включая арку) не спорит. Чтобы сказать, что есть косяк управления автоматической памятью, нужно показать, что либо а) коллектор собирает объекты, не помеченные мусорными, либо б) коллектор не собирает объекты, помеченные мусорными. Ничего такого пока показано не было. Все остальное это уже не вопрос управления автоматической памятью.

Грядущие изменения на срочном рынке МБ: поддержка работы с 19-значными номерами заявок и сделок
 
Цитата
TGB написал:
Интересно, кому непонятно что это фундаментальная проблема нестабильности QLua
Я, я, я этот человек! (не аффилирован ежли кто не знал)
Грядущие изменения на срочном рынке МБ: поддержка работы с 19-значными номерами заявок и сделок
 
Цитата
Futurum написал:
Если уважаемый TGB вместе с разработчиками добьется лучшей работы с памятью
Проблема в том, что особо не видно драматических изменений в устройстве коллектора по сравнению с оригинальным луа, так что имеются основания полагать, что повреждение памяти это вторичное явление и ковырять коллектор суть пустая трата времени и сил, надо искать причины в более других местах. Вот обещали косячок с резервированием вечно одного слота стека поправить вскоре, там посмотрим, все ли было от него или еще что-то есть. Если же косяк на стороне самого луа, тут с арки какой спрос может быть, я б на их месте в принципе ни буквы не правил, иначе нельзя будет посылать в Рио пользователей с вопросами "а почему в луа так, а я хотел вот эдак".

Цитата
новичок написал:
разницу между промышленнм вычислятором с внутренним контролем исправности цепей со спец софтом
Думается, у 99% пользователей тупо ECC нет, какой уж там контроль исправности.
Открытие файла и память
 
UPD. Не успевает коллектор. Вот так не течет
Код
local stopped = false

function OnStop(flag)
    stopped = true
end

function f11()
   local fpath = getScriptPath() .. "\\tos11.log"
   local f = io.open(fpath, "w+")
   f:close()
   f = nil
end

function main()
    while not stopped do
      f11()
      sleep(100)
      collectgarbage("step")
    end
end
Открытие файла и память
 
Цитата
валерий написал:
так вопрос-то именно в том откуда здесь вообще может взяться garbage?
Так-то мусора полно. Объект файл один уже чего стоит, он ведь не кэшируется, открыли-закрыли - в мусор. Строка от getScriptPath сразу после использования - в мусор, fpath сразу после использования - в мусор. По-хорошему оно должно рано или поздно начисто все прибираться, иначе либо не успевает коллектор (вполне, кстати, возможно), либо где-то подтекает все-таки.
Вопросы Новичка
 
Цитата
Афонькин написал:
Меня вот возмущает, что проверка на nil есть, а она не срабатывает.
Внимательно смотрим, а чего ж это она не срабатывает-то...
Код
if z.bid[i].quantity ~= nil then
            lag = lag + tonumber(z.bid[i].guantity)
...во второй строке как-как поле называется? Точно-точно?
Зависание QUIK
 
Цитата
Evgeniy Karnaukhov написал:
Сообщите, пожалуйста, версию Вашего QUIK.
Версия 8.9.0.107.
Зависание QUIK
 
Roman Azarov,  приветствую. Отправил.
перестало работать снятие активной заявки
 
Цитата
Владимир написал:
ВЕЗДЕ, где хранятся данные типа double, МОЖНО хранить и int64 (int32, Int 16, int8 и прочее - это просто кусок памяти!
К сожалению нет уже. Сейчас это не обязательно восемь байт в памяти, это может быть регистр, причем для интов это будет целый регистр, а для флотов уже даже не fpu, а xmm. А эти последние хотят еще и выравнивания на 16 байт. То есть даже на асме попытаться безбашенно воткнуть в xmm произвольные восемь байт может закончиться крэшем. Да и в старые добрые времена x87 операция fld qword ptr могла выкинуть исключение, если там вдруг окажется денормализованное число. А тут вообще сишный компилятор, он имеет свое мнение, где что ожидать, попросить его по дружбе загрузить флот в rax не получится.
Зависание QUIK
 
Весьма качественный тест получился, несколько минут и готово. Получил два зависания квика, получил два access violation в запускаемом скрипте. Характерно, что именно в момент запуска все случается, кнопка запустить отлипнуть не успевает, то есть, думаю, в арке понимают, в какое место надо посмотреть. Самому сейчас дампы смотреть нечем, по мере возможности поизучаю.
Зависание QUIK
 
Старатель, воспроизвел. Четыре скрипта завел, перезаказал твс, после второго стоп-старт квик слетел без дампа. Соответственно поковырять нечего, только догадки строить. Попробую еще дамп получить.
Функции onInit, onStop, onClose
 
Цитата
Владимир написал:
У меня же мейн НЕ вызывает SetCell - это происходит в обработчике, то бишь в главном потоке.
Все же small это не более чем функция, выполняется в том потоке, в котором вызвана, в данном случае в потоке мейна. Ее в принципе можно в мейн заинлайнить и ничего не изменится (кроме читаемости скрипта). Попробуйте огородить SetCell условием if f then SetCell(...) end. Хотя строгих гарантий от дедлока оно тоже не даст, просто уменьшит его вероятность; если кнопку стоп удачно нажмут между ифом и вызовом, таки повиснет.
Функции onInit, onStop, onClose
 
Цитата
Владимир написал:
Насколько я понимаю, какая-то скотина, связанная с SetCell, не возвращает управление в main.
Верно. Как раз тот случай, когда для понимания причины надо поковыряться в кишках квика. Значит, что мы имеем. Все колбеки выполняются в главном потоке квика, в нем же живут все окна и очередь сообщений. Мейн выполняется в своем отдельном потоке. Вы жмете кнопку остановить, сообщение обрабатывает главный поток квика, и обрабатывает следующим образом:
1) вызывает колбек OnStop
2) ждет 5 секунд или сколько возвращено из OnStop, причем ждет тупым WaitForSingleObject(hMainThread, timeout). По выходе из этой функции квик проверяет, почему вышли. Если завершился поток мейна, все ок, если по таймауту - поток мейна прибивается принудительно через TerminateThread.
3) в любом случае зачищаются остатки скрипта и завершается обработка сообщения от кнопки остановить.

Теперь смотрим, что будет происходить в приведенном случае. Вы жмете кнопку остановить, главный поток квика посылает OnStop, скрипт оттуда возвращается, главный поток квика входит в WaitForSingleObject. В этот момент мейн вызывает SetCell, что под ковром приводит к отправке сообщения окну скрипта (живущему в главном потоке). Но главный поток сообщений не обрабатывает, он стоит на WaitForSingleObject. Ваш мейн зависает в ожидании ответа на сообщение. Через 5 секунд WaitForSingleObject возвращается по таймауту, квик видит таймаут и прибивает мейн принудительно. Собственно и все.

Цитата
Владимир написал:
Что делать?
Очевидно, просто поменять в мейне sleep() и small() местами уже даст некоторый эффект, но без гарантий. Лучше проверять флаг f перед каждым вызовом SetCell.
Зависание QUIK
 
Цитата
Старатель написал:
Попробуйте следующий скрипт
Попробую в течение нескольких дней, отпишусь по результатам.
Вопросы Новичка
 
Цитата
nikolz написал:
а  я должен гадать
Нет, вы не должны гадать. Было бы здорово не пихать свое чрезвычайно важное мнение в каждую ветку, не заморачиваясь ее чтением.
Предложение к разработчикам
 
Владимир,  придурки потому что "по тобину" или потому что "на всю котлету"?
Предложение к разработчикам
 
Цитата
Владимир написал:
А что такое "правильные инвесторы"?
Цитата
Anton написал:
Ну вот шоп набрали прям по тобину на всю котлету и сидят.
Страницы: Пред. 1 ... 5 6 7 8 9 10 11 12 13 14 15 ... 28 След.
Наверх