Миф об асинхронности функции OrderSendAsync()
В итоге, в результате выполнения этого кода, в терминале я получаю 100 строк с удачным (или не удачным - не важно) выполнением операции и только ПОСЛЕ этого выводится сообщение "Test message", что мне кажется крайне нелогичным. Уж если функция асинхронная, то не должна прерывать программу. А по факту мы видим обратное. Никакой асинхронностью здесь и не пахнет.
Возникает вопрос. В чём же тогда дело? Кто-нибудь сталкивался с подобной проблемой?
Кто поможет разобраться с этой аномалией?
Так и должно быть.
Сначала отработает цикл, а потом принт.
Так и должно быть.
Сначала отработает цикл, а потом принт.
Цикл должен отработать - с этим я не спорю.
Но Print, которые выводится внутри цикла должны отрабатывать после того, как отработает Print("Test message");
По крайней мере, в языке программирования JavaScript (который часто работает с асинхронными функциями), всё работает именно так, как я только что описал.
Цикл должен отработать - с этим я не спорю.
Но Print, которые выводится внутри цикла должны отрабатывать после того, как отработает Print("Test message");
По крайней мере, в языке программирования JavaScript (который часто работает с асинхронными функциями), всё работает именно так, как я только что описал.
Как может то, что стоит в конце отработать раньше того, что стоит в начале?
Операторы и функции выполняются последовательно в порядке их написания в коде.
Я новичок в mql5, но опыт программирования на других языках у меня достаточно большой.
Как может то, что стоит в конце отработать раньше того, что стоит в начале?
Операторы и функции выполняются последовательно в порядке их написания в коде.
Ещё раз повторяю: Функция OrderSendAsync(), если верить документации, "не должна приостанавливать работу программы в ожидании результата её (функции) выполнения".
Вот так и может то что стоит в начале отработать позже того, что стоит в конце.
C потоками бы вам еще поразбираться...
Что Вы имеете в виду? Есть ссылки по этой теме?
опыт программирования у меня достаточно большой.
+
:))) настроение поднял на весь оставшийся день.
пиши исчо :))
:))) настроение поднял на весь оставшийся день.
пиши исчо :))
Ну объясните тогда в чём у меня неточность, модератор. Сам хоть посмеюсь, как осознаю.
Я на форум пришёл, чтобы помощь получить, а не едкие замечания в свою сторону.
И тут уж пропадает всякое желание "писать исчо".
Ну объясните тогда в чём у меня неточность, модератор. Сам хоть посмеюсь, как осознаю.
1. у вас неточность в осознании "асинхронности" функции OrderSendAsync
2. вы не осознаете чем отличается "цикл в потоке" и "два потока".

- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Я новичок в mql5, но опыт программирования на других языках у меня достаточно большой.
Сегодня столкнулся со следующей проблемой.
Функция OrderSendAsync(), если верить документации, "не должна приостанавливать работу программы в ожидании результата её (функции) выполнения".
Но на деле я обнаружил, что программа не выполняется дальше, пока не придёт результат о выполнении функции.
Приведу пример своего кода:
CTrade trade;
trade.SetExpertMagicNumber(123456);
trade.SetDeviationInPoints(10);
trade.SetAsyncMode(true); // Какую функцию использовать для торговли: true - OrderSendAsync(), false - OrderSend()
for (int i=0; i<100; i++) {
if(trade.Buy(0.01, "USDCAD.e")) {
Print("Метод Buy() выполнен успешно. Код возврата=",trade.ResultRetcode(), " (",trade.ResultRetcodeDescription(),")");
} else {
Print("Метод Buy() потерпел неудачу. Код возврата=",trade.ResultRetcode(), ". Описание кода: ",trade.ResultRetcodeDescription());
};
};
Print("Test message");
В итоге, в результате выполнения этого кода, в терминале я получаю 100 строк с удачным (или не удачным - не важно) выполнением операции и только ПОСЛЕ этого выводится сообщение "Test message", что мне кажется крайне нелогичным. Уж если функция асинхронная, то не должна прерывать программу. А по факту мы видим обратное. Никакой асинхронностью здесь и не пахнет.
Возникает вопрос. В чём же тогда дело? Кто-нибудь сталкивался с подобной проблемой?
Кто поможет разобраться с этой аномалией?