Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
fxsaber, хм... Век живи, век учись - можно темплейты вот прямо так использовать, без угловых скобок ?
Я всегда использовал только так:
Print(_GlobalVariableGet<MqlTick>(Name).time);
Как вариант, таким образом можно записывать и считывать из глобальных переменных строки, простые структуры и даже массивы (например, обмениваться результатами CopyTicks)
Возможно, стоит причесать в виде библиотеки.
атомарность нарушается и можно наступить на крепкие грабли
Не владею терминологией. Поясните.
к примеру в внутри цикла
есть шанс что массив (структура) будет одновременно изменяться от другой стороны (советника) и вы часть массива получите прежним, а оставшуюся новым. То есть в результате будет тыква.
к примеру в внутри цикла
есть шанс что массив (структура) будет одновременно изменяться от другой стороны (советника) и вы часть массива получите прежним, а оставшуюся новым. То есть в результате будет тыква.
Для этого есть GlobalVariableSetOnCondition, а альтернативу ей было влом писать.
Честно говоря, никогда не использовал глобальные переменные. Поэтому даже не знаю, для чего они нужны.
к примеру в внутри цикла
есть шанс что массив (структура) будет одновременно изменяться от другой стороны (советника) и вы часть массива получите прежним, а оставшуюся новым. То есть в результате будет тыква.
Не владею терминологией. Поясните.
самый технически правильный способ - это к вашей библиотеки TypeToBytes (так кажется называется) привесить опциональный интерфейс к любой key-value базе. Да, это будет DLL, но зато это будет круто.
Тут терминологическое невежество снова не позволяет мне понять смысл сказанного.
Крутость не преследуется. Библиотеку используют < 1%. Еще бОльшие навороты будут использовать < 1% от этих использующих. Поэтому видится правильным, что должна быть просто база. И она есть. Уже этого оказалось достаточным, чтобы легко писать ранее сложные вещи. Код выше - из таких вещей.
Тут терминологическое невежество снова не позволяет мне понять смысл сказанного.
Крутость не преследуется. Библиотеку используют < 1%. Еще бОльшие навороты будут использовать < 1% от этих использующих. Поэтому видится правильным, что должна быть просто база. И она есть. Уже этого оказалось достаточным, чтобы легко писать ранее сложные вещи. Код выше - из таких вещей.
key-value база - минималистичная СУБД которая хранит произвольные данные по произвольным-же уникальным ключам и гарантирует атомарность чтения-записи.
Просто постановка вопроса - "а может стоит хранить строки?" намекает что стоит хранить вообще произвольные данные. Да и вместо ключей удобно использовать структуры. А это и есть key-value база. А ваша библиотека как раз и работает с произвольными данными (по крайней мере их конвертирует). То есть возможность внешнего хранения данных - логичное развитие.
PS/ ещё раз - код который выше несёт в себе ошибку. А то сейчас не подумавши начнут тягать к себе в проекты :-)PS/ ещё раз - код который выше несёт в себе ошибку. А то сейчас не подумавши начнут тягать к себе в проекты :-)
В чем ошибка _GlobalVariableSet, по сравнению со штатной GlobalVariableSet? Обе не обладают атомарным доступом.
Прошу показать в кодобазе библиотеку, обладающую атомарным доступом. Или в том же MQL, акромя упомянутой GlobalVariableSetOnCondition.
File-функции - нет, включая Memory Mapping. Где такой функционал?
В чем ошибка _GlobalVariableSet, по сравнению со штатной GlobalVariableSet? Обе не обладают атомарным доступом.
Прошу показать в кодобазе библиотеку, обладающую атомарным доступом. Или в том же MQL, акромя упомянутой GlobalVariableSetOnCondition.
File-функции - нет, включая Memory Mapping. Где такой функционал?
Как раз все стандартные GlobalVariableXXX атомарны. GlobalVariableGet гарантирует что ты получишь значение записанное GlobalVariableSet целиком в том виде в каком оно в последний раз записано.
А вот если использовать вашу _GlobalVariableGet то получается ай-яай :-) В двух потоках (советниках) запустился _GlobalVariableSet, а в третьем одновременно _GlobalVariableGet получит мусор, часть данных от одного, часть от другого. Затейливая такая ошибка, сложно имитируется в тестировании, но в реальной жизни проявится в самый неподходящий момент.