Создание GUI для MQL в графическом режиме. - страница 13

 
Алексей Барбашин:

Максим, и чем это решение лучше? Ведь для опроса состояния флага так же необходимо делать его периодическую проверку в MQL. Получается куда не копни, нужно постоянно мониторить изменение состояния чего либо, чтобы понять что пора забрать данные. А этот фраг можно и в самой dll хранить и там его проверять, что я и делаю. В твоем примере происходит неявный вызов dll для возвращения состояния флага.

проверка флага это очень быстрая операция. То есть вообще самая быстрая :-)

и в приведённом примере нет неявных вызовов:

InitDLL получил на входе int *flags, сохранил его где-то там у себя, Породил тред, который что-то считает и по завершению делает atomic_inc(flags).

Советнику остаётся только проверять flags[0].

 
Именно проверять. В этом и есть ключевой момент. А я же предлагаю оповещать инструмент о том, что "задание" выполнено. То есть чтобы не приходилось тратить постоянные ресурсы на проверку. Пришло оповещение - получили данные.
 
Maxim Kuznetsov:

проверка флага это очень быстрая операция. То есть вообще самая быстрая :-)

и в приведённом примере нет неявных вызовов:

InitDLL получил на входе int *flags, сохранил его где-то там у себя, Породил тред, который что-то считает и по завершению делает atomic_inc(flags).

Советнику остаётся только проверять flags[0].

Только тут простой проверкой флага не обойтись ведь, inter-thread синхронизация нужна, барьеры, atomic или мьютекс какой брать, не для каждого CPU актуально, конечно.


Алексей Барбашин:
Именно проверять. В этом и есть ключевой момент. А я же предлагаю оповещать инструмент о том, что "задание" выполнено. То есть чтобы не приходилось тратить постоянные ресурсы на проверку. Пришло оповещение - получили данные.
А как реализованы всякие мьютексы? Всё через проверку и установку флагов, насколько я знаю. Вам в любом случае где-то в мкл потоке придётся проверять какой-то флаг.
 
Maxim Kuznetsov:

проверка флага это очень быстрая операция. То есть вообще самая быстрая :-)

и в приведённом примере нет неявных вызовов:

InitDLL получил на входе int *flags, сохранил его где-то там у себя, Породил тред, который что-то считает и по завершению делает atomic_inc(flags).

Советнику остаётся только проверять flags[0].

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

Хочу вернутся к вопросу GUI. Не важно на чем нарисованному. К примеру я делаю на шарпе, ты делаешь на Tcl.

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

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

Предлагаю пока попробовать решить этот вопрос, так как все равно лежит не в области действий разработчиков МТ.

Ты пробовал свои GUI к графикам цеплять?

 
pavlick_:

Только тут простой проверкой флага не обойтись ведь, inter-thread синхронизация нужна, барьеры, atomic или мьютекс какой брать, не для каждого CPU актуально, конечно.


А как реализованы всякие мьютексы? Всё через проверку и установку флагов, насколько я знаю. Вам в любом случае где-то в мкл потоке придётся проверять какой-то флаг.

Совершенно верно. Но пусть это происходит уже на самом нижнем, прикладном уровне, как например это работает с OnChartEvent. То есть сейчас мы это явно программируем (проверки), а можно все это перенести на прикладной уровень, о чем Ренат и сказал (предложил варианты).

 
Maxim Kuznetsov:

у меня вот завалились :-)  дарю - можешь скинуть в MS

066cd265-e2fe-468e-9492-4228e9759e38
8e1040ba-dc3e-4e2a-9208-e3ea8da9ad05
03dcd7cd-4b9b-4ff7-bff0-e0839a0f9d8b
d69f2c8c-de51-4557-8188-4ebb870da7da
a79a8cc6-f785-4268-bc4e-2deda0f1ecd0
f4f59f52-1da8-4f74-a71e-9aec1992674d
85608797-6015-456d-af64-ad7890120372
9289991a-e287-47fb-b595-6d719c1b7dbd
63d3b953-3229-4045-a82a-fc9e7795bb01
c75c4e0f-8320-42df-943c-9aada54b60eb

если что, обращайся - может ещё найду

Спасибо, сдал, получил бакс!

 
Alexey Volchanskiy:

Спасибо, сдал, получил бакс!

так это весомо прибыльней скальпера ! готов отдавать в розницу guid по центу, ты их оптом сдаёшь по 1$/десяток.  Профит ограничен только скоростью передачи :-) сколько-то там килобайт guid`ов в секунду
 
Maxim Kuznetsov:
так это весомо прибыльней скальпера ! готов отдавать в розницу guid по центу, ты их оптом сдаёшь по 1$/десяток.  Профит ограничен только скоростью передачи :-) сколько-то там килобайт guid`ов в секунду

Заманчиво, черт побери. Так мы завоюем рынок подержанных GUIDов! И станем монополистами, создадим искуственный ажиотаж, как с биткоином и озолотимся!

 
Алексей Барбашин:

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

Хочу вернутся к вопросу GUI. Не важно на чем нарисованному. К примеру я делаю на шарпе, ты делаешь на Tcl.

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

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

Предлагаю пока попробовать решить этот вопрос, так как все равно лежит не в области действий разработчиков МТ.

Ты пробовал свои GUI к графикам цеплять?

у меня честно говоря не возникало потребности цеплять формы к чартам.

просто чётко разделяю для себя - есть оперативная графика которая непосредственно связана с чартом (всякии линии, подписи, надписи и так далее), это естественно делается средствами MT

а есть GUI управления - настройки, отчёты, статистика. И они весьма большие и запихивать их внутрь чарта это преступление против пользователя :-)

поместить форму поверх чарта можно без смены родителя. просто тупо поместить сверху ;-) придётся конечно отнять форму от оконного менеджера и отслеживать изменение геометрии чарта и фокус.
Такой вот "закат солнца вручную" :-) Зато не лезешь в нутро MetaTrader и не навязываешь новых чилдов и хуков их окнам, то есть ведёшь себя прилично

да и любой GUI вызванный из DLL имеет пренеприятнейшую особенность - советники/индикаторы которые его вызывают, периодически от малейших чихов рестартуют. Что порождает переоткрытие форм и водопады мата..
Возможно давно анонсированные "сервисы" (или как их там назовут) будут лишены такого недостатка.

update/ про поместить форму - на график вывести RectLabel и в чарт-эвент отслеживать изменение кординат. При изменнии - поместить строго сверху свою форму :-) Немного танцев с бубном потребуется при смене вкладок, минимизации окна, чтобы свою форму вовремя спрятать
 
Alexey Volchanskiy:

Вообще ничего не объяснил. Четко ответь плз - как ты из МТ* получаешь данные из панели на шарпе?

Я делал обратную связь через Memory Mapping с опросом по таймеру. Панель передавала только разные настройки и результаты медленных расчетов

У меня внешняя ТС, мне не надо обратной связи GUI с терминалом.