Ошибки, баги, вопросы - страница 2753
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
У меня, при отладке и при самой работе индикатора, в журнале, внезапно пишет Stack overflow. При самой отладке вылетает сообщение "Возникла критическая ошибка, отладка остановлена". Вот моя аналогичная тема: https://www.mql5.com/ru/forum/338301. Но при компиляции компилятор не ругается и всё проходит нормально. При отладке невозможно установить в какой момент программа вылетает.
Возможно, всё дело в компиляторе? Какой компилятор используется я особо не вникал, но в настройках у меня следующая картина:
У меня установлен VS, поэтому, в настройках эта ссылка. Значит и компилятор соответствующий?... Но какой компилятор был, когда VS у меня не было, я честно говоря, не вникал. Может быть, следует попробовать вернуться к тому компилятору и попробовать скомпилировать проект с помощью него?
Пока я искал способы решения проблемы, с приходом очередного обновления терминала отладка заработала должным образом. Удалось найти ошибки. Некоторые методы зацикливались, вызывая сами себя. Поэтому программа и вылетала с сообщением "Stack overflow". Но с помощью работающей отладки мне удалось найти все проблемные строки и исправить их. Выражаю свою благодарность Разработчикам за быстрое устранение бага с отладкой!
в естественном языке (в математике) константа это... ну как бы константа! ))
в С++ константа это машинная проверка компилятором константности в области видимости (или жизни) переменной
В C++ так же как и в MQL, константе можно один раз задать значение при создании и больше его не изменять. Области видимости тут не при чём.
Не сильно отличается от того что в математике.
Узнал, что компилятор встроен в MetaEditor с 900 билда: https://www.mql5.com/ru/forum/21374
Тогда к чему это окно со строкой ведущей к каталогу где установлен VS?
Компилятор VS используется, если Вы пишете DLL.
Что лишний раз подтверждает, что никакого смысла в использовании напрямую _Digits, _Point, _Period, _LastError и т.д. нет (и даже _Symbol можно заменить на NULL). Фактически они должны быть объявлены как const volatile
А Вы наоборот - предлагаете дополнить этот ряд
Что лишний раз подтверждает, что никакого смысла в использовании напрямую _Digits, _Point, _Period, _LastError и т.д. нет. И даже _Symbol можно заменить на NULL
А Вы наоборот - предлагаете дополнить этот ряд
Смысл в возможности передать по ссылке.
Смысл в возможности передать по ссылке.
Также как и со строками у Разработчиков есть возможность (если уже не сделали) итак все передавать по ссылке без фактического копирования переменной
И это будет решение не для одной конкретной структуры MqlTick, а на все случаи жизни
Что лишний раз подтверждает, что никакого смысла в использовании напрямую _Digits, _Point, _Period, _LastError и т.д. нет (и даже _Symbol можно заменить на NULL). Фактически они должны быть объявлены как const volatile
А Вы наоборот - предлагаете дополнить этот ряд
Вы правы, но только они почтиvolatile, кроме флага IsStopped - он volatile на 100%, т.е. любое чтение IsStopped, это 100% чтение памяти.
Для остальных, почтиvolatile - значит, что компилятор МОЖЕТ закешировать значение переменной в регистре при первом обращении и при следующем обращении к такой переменной использовать закешированное значение, но только в пределах одной функции или ветки вызовов, если они заинлайнились в одну функцию.
Это можно (и нужно), так как смена предопределённых переменных (кроме IsStopped) не может произойти внутри MQL точки входа (OnXXX функции)
По поводу МОДИФИКАТОРА ПЕРЕМЕННОЙconst, скажем так, что используeтся const программистами для программистов.
Как мы знаем, через приведение можно сменить константность епеременной, поэтому компилятору нельзя доверять модификатору const.
Если компилятор видит, что переменная не меняла значения и инициализируется константой, то он и без модификатора const превратит такую переменную в непосредственное значение (ImmediateValue)
По поводу _LastTick, мы обсуждаем, но...
Это структура, а не простой-атомарный тип и изменяться она может внезапно, в любой точке MQL программы, в том числе и во время получения значения.
Получается, что для адресации к этой структуре нужно вводить синхронизатор.
Мы постоянно работаем над производительностью, в частности из-за этого высокая частота выхода билдов.
В планах много работ по ускорению работы MQL-кода
По поводу _LastTick, мы обсуждаем, но...
Это структура, а не простой-атомарный тип и изменяться она может внезапно, в любой точке MQL программы, в том числе и во время получения значения.
Получается, что для адресации к этой структуре нужно вводить синхронизатор.
но в тестере _LastTick не может измениться в любой точке MQL программы ?
если да, то дайте такое решение только для тестера, где скорость расчетов наиболее важна
но в тестере _LastTick не может измениться в любой точке MQL программы ?
если да, то дайте такое решение только для тестера, где скорость расчетов наиболее важна
Так а что мешает один раз запросить этот тик в обработчике OnTick, и дальше уже работать с полученным данными?
Мешает низкая квалификация создателей советников, которыми грузят Маркет и Облако.