Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Пока Ренат спит. ))
Я делаю в ДЛЛ через коллекции. Один поток (или потоки) пишет данные в коллекцию(и), другие эти коллекции читают начиная с конца, и удаляют из коллекции уже прочитанное. Потоки никак не взаимодействуют друг с другом. И читаются самые новые данные, но, в итоге все данные будут прочитаны.
Юрий, просто скелет примера, без внутренних алгоритмов вашего проекта. Буду вам признателен.
Вот это мне и нужно :), это отрывок статьи:
Под асинхронным программированием я понимаю стиль программирования, который можно охарактеризовать следующим выражением: “дал задачу и забыл”. Т.е. это такой стиль при котором все тяжеловесные задачи исполняются в отличном от вызывающего потоке, и результат выполнения которых может быть получен, вызывающим потоком, когда он того пожелает(при условии, что результат доступен).
Юрий, просто скелет примера, без внутренних алгоритмов вашего проекта. Буду вам признателен.
Как это? Все чистить и в разных классах? Не, не смогу, просто долго.
Сделано на смеси managed-unmanaged C++ c NET библиотеками. Могу попробовать экземплы в MSDN найти. Все, собственно, на их базе.
System.Collections, System.Threading,класс Thread - пожалуй все, что нужно.
Как это? Все чистить и в разных классах? Не, не смогу, просто долго.
Сделано на смеси managed-unmanaged C++ c NET библиотеками. Могу попробовать экземплы в MSDN найти. Все, собственно, на их базе.
Да, хотя бы направление, чтобы не тратить время на варианты. Просто печально, я только портировал проект из С++ в MQl и теперь придется опять все переписывать на С++ ((((, это меня бесит.
Просто хочу оптимизировать расчетную часть(математику), а боту дать только готовый результат и для управления ордерами.Да, хотя бы направление, чтобы не тратить время на варианты. Просто печально, я только портировал проект из С++ в MQl и теперь придется опять все переписывать на С++ ((((, это меня бесит.
System.Collections, System.Threading,класс Thread - пожалуй все, что нужно.
Все доки вообще здесь - https://msdn.microsoft.com/ru-ru/library/system.threading.thread(v=vs.110).aspx
Описание коллекций - https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/concepts/collections
Просто хочу оптимизировать расчетную часть(математику), а боту дать только готовый результат и для управления ордерами.
Давайте в личку перейдем.)
Давайте в личку перейдем.)
Сделано на смеси managed-unmanaged C++ c NET библиотеками. Могу попробовать экземплы в MSDN найти. Все, собственно, на их базе.
System.Collections, System.Threading,класс Thread - пожалуй все, что нужно.Соглашусь, пока иных способов не вижу. Хотя можно извращаться с глобальными переменами, но это крайний случай.
Вы не тем занимаетесь. Работа с потоками и прочими извратами - это как стрелять по воробью из пушки. Вопрос: Зачем? Вы сюда пришли писать роботов для зарабатывания денег, а не этюды по программированию решать.
Есть конкретная задача:
В моем случае не было попытки "ускорить", все достаточно тривиально, просто хотел избавить эксперт от вычислений которые мешают ему, в реальном режиме времени принимать решения (открытие/закрытие/модификация) по позициям, пока он находится в состоянии перерасчет.
Для этого мне нужен асинхронный поток.
Вот ее решить обычными средствами MQL4 достаточно просто. Для этого необходимо разорвать цикл расчета в OnCalculate на несколько итераций, и никаких извратов с потоками для этого делать не нужно.
Я написал рабочий прототип из двух частей: индикатора и эксперта. Индикатор имитирует тяжелый расчет, эксперт получает значения этого индикатора, паралельно сигнализируя в Comment сколько баров из общего количества рассчитано.
Индикатор
Эксперт:
Вот результат:
Конечно, доделывать здесь еще много, но у Вас же 20 лет программисткого стажа.
Еще раз поймите асинхронность != многопоточность. Асинхронность - это паттерн программирования, вид алгоритма, а не какая-то крутая внешняя библиотека типа System.Threading.
кстати в индикаторах можно использовать значение
return(rates_total);
и на следующем вызове получить его в
таким несложным образом можно разорвать логику сложный вычислений на "бесконечное" количество частей, код примерно так должен выглядеть: