Ошибки, баги, вопросы - страница 3391

 
Maxim Kuznetsov #:

отвлечённо - у нас даже с DLL будут небольшие проблемы. 

Советник запускается в отдельном системном треде, индикаторы в отдельном (вроде как все вместе на 1 чарт), сервис в отдельном. Терминал обеспечивает им поступление данных через OnXXX, синхронизацию торгового окружения (или доступ к общему, это под капотом)
и штатные способы взаимодействия (напомню - они в разных тредах исполняются). 

Стандартный путь, чтобы из одного независимого треда передать данные в другой - нужно что-то между ними общего. Общего - перечисленные вещи (переменные, chartevent, ресурсы, базы,файлы). То есть сделано хорошо, тут не придраться. 

Так в чём проблема разработчикам сделать пару-пар семафорных спецификаторов с атомарным доступом, и дать пользователям?
В глобальных переменных терминала есть атомарный доступ по условию, но только передавать тип double, как так?
Ну пусть тогда глобальным переменным терминала, дадут все стандартные типы.
Или вернут обратно поведение .ex5 библиотеки, сами разберемся с семафорами.
Ну или на крайний случай добавить пользовательские события, не связанные с графиками.

 
Roman #:

Так в чём проблема разработчикам сделать пару-пар семафорных функций с атомарным доступом, и дать пользователям?
В глобальных переменных есть атомарный доступ по условию, но только передавать тип double, как так?
Ну пусть тогда глобальным переменным терминала, дадут все стандартные типы.
Или вернут обратно поведение .ex5 библиотеки, сами разберемся с семафорами.

А что мешает использовать глобальные переменные терминала? Вещественный тип - максимальный, позволяющий вписать без потери данных остальные типы
 
Artyom Trishkin #:
А что мешает использовать глобальные переменные терминала? Вещественный тип - максимальный, позволяющий вписать без потери данных остальные типы

Зачем использовать вещественный тип для передачи одного байта к примеру.
Как через вещественный тип передать строку char массива или string?
Может я не знаю и вы сможете показать пример?

 
Roman #: Зачем использовать вещественный тип для передачи одного байта к примеру. Как через вещественный тип передать строку char массива или string? Может я не знаю и вы сможете показать пример?
UnionДругим способом копировать простые типы является использование объединения, для этого объекты этих структур должны являться членами одного и того же объединения – смотрите пример в union.
 
Roman #:

Зачем использовать вещественный тип для передачи одного байта к примеру.
Как через вещественный тип передать строку char массива или string?
Может я не знаю и вы сможете показать пример?

массивы char, int или целых записей во многих случаях легко организуются в базу. Они подчастую от природы имеют "индекс". И сам массив на приёмнике тоже нужен не весь а какая-то выборка из него.
Это всё организуется через SQLite. Он встроен. Снизишь нагрузку и на источник (не надо пихать весь массив, только инкременты) и на читателя, аналогично+сложные выборки

 
Fernando Carreiro #:
UnionДругим способом копировать простые типы является использование объединения, для этого объекты этих структур должны являться членами одного и того же объединения – смотрите пример в union.

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

un

 
Roman #:

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

Ресурсы + union легко с этим справляются. 
Тем более использовать строки разумно непосредственно перед выводом (Print(), Comment() и т.д.). В остальных случаях использовать массив uchar. Благо есть стандартные функции для преобразования string в uchar[] и обратно. 
У fxsaber есть нормально работающая библа для этого.
Можете в этом обсуждении посмотреть примеры.

 
Nikolai Semko #:
Ресурсы + union легко с этим справляются. 
Тем более использовать строки разумно непосредственно перед выводом (Print(), Comment() и т.д.). В остальных случаях использовать массив uchar. Благо есть стандартные функции для преобразования string в uchar[] и обратно. 
У fxsaber есть нормально работающая библа для этого.
Можете в этом обсуждении посмотреть примеры.

Посмотрел. При всём уважении к fxsaber за его мега мозг, я не поклонник его стиля программирования.
Там же столько инструкций для компилятора получается.
Разбирать ооп в таком стиле, спасибо это не мой подход, я стремлюсь к минимализму в коде.
Всего то надо передать строку, а такая боль получается. SQLite на память, по интереснее смотрится. 
Но хотелось бы стандартных решений, без бубнов. Работала же библиотека .ex5, что не так стало, не пойму.

 
Ещё вопрос вспомнился.
Есть ли какой способ из сервиса узнать признак открытия стакана?
Например жмакаем на кнопку открытия стакана на чарте, как узнать признак, что по этому инструменту открылся стакан
Опять же без dll, и ковыряния в окнах.
 
Roman #:

Посмотрел. При всём уважении к fxsaber за его мега мозг, я не поклонник его стиля программирования.
Там же столько инструкций для компилятора получается.
Разбирать ооп в таком стиле, спасибо это не мой подход, я стремлюсь к минимализму в коде.
Всего то надо передать строку, а такая боль получается. SQLite на память, по интереснее смотрится. 
Но хотелось бы стандартных решений, без бубнов. Работала же библиотека .ex5, что не так стало, не пойму.

С одной стороны я Вас понимаю на счёт кода fxsabera , но, с другой стороны, если бы не поленились ( ведь вопрос задали Вы в надежде получить ответ) и прочитали хотя бы пару страниц обсуждения с сообщения, на которое дал ссылку, то не гнали бы напраслину.
Конструкция ресурсы+ union - это не костыль, а низкоуровневая нативная фича, на основе которой по сути построены сами глобальные переменные. А вот пытаться реализовать подобное через SQLite - это реальный костыль, который будет работать на несколько порядков медленнее.

Причина обращения: