Асинхронное и многопоточное программирование в MQL - страница 35

 
Andrei Novichkov:

А собственно почему бы про флаг не прочитать в документации? На https://en.cppreference.com . И примеры с обсуждением  на stackoverflow.com. Я обычно эти источники информации использую, что и Вам советую.

А чего тогда встревать в разговор, если за слова не отвечаете? Меня интересовало ваше мнение, а не умных дядек из справочника. Проходите и не мешайте. Доки я без ваших указаний могу почитать. А для вызова функции в одном потоке мне не нужен весь этот зоопарк из future/promise/async.

 
Vict:

А чего тогда встревать в разговор, если за слова не отвечаете? Меня интересовало ваше мнение, а не умных дядек из справочника. Проходите и не мешайте. Доки я без ваших указаний могу почитать. А для вызова функции в одном потоке мне не нужен весь этот зоопарк из future/promise/async.

Чепуху какую то несете. Вы не знаете, я Вам подсказал, где информацию найти. И оказался виноват. Чаще дружите с книгами.
 
Andrei Novichkov:
Чепуху какую то несете. Вы не знаете, я Вам подсказал, где информацию найти. И оказался виноват. Чаще дружите с книгами.

Видимо и сами не знаете. Зачем писать ни о чём? Может и не знаю, чего в этом такого? Спросил по нормальному мнение, он меня в ответ послал куда-то.

В чёрный список, товарищ.

 
Vict:

Видимо и сами не знаете. Зачем писать ни о чём? Может и не знаю, чего в этом такого? Спросил по нормальному мнение, он меня в ответ послал куда-то.

В чёрный список, товарищ.

Никуда я вас не посылал, даже и в мыслях не было. Своими словами я отвечаю на такие вопросы плохо, вот и написал про документацию. Опять таки, что тут такого, на что обижаться? Но как хотите, в черный, так в черный.
 
Andrei Novichkov:
Никуда я вас не посылал, даже и в мыслях не было. Своими словами я отвечаю на такие вопросы плохо, вот и написал про документацию. Опять таки, что тут такого, на что обижаться? Но как хотите, в черный, так в черный.

Ну документация по этому поводу мало полезна

std::launch::deferred      the task is executed on the calling thread the first time its result is requested (lazy evaluation)
Нафига такое чудо надо - я не очень понимаю, я спокойно могу передать указатель на функцию в нужный мне поток и там его вычислить без всяких там async( std::launch::deferred).
 
Vict:

Нафига такое чудо надо - я не очень понимаю, я спокойно могу передать указатель на функцию в нужный мне поток и там его вычислить без всяких там async( std::launch::deferred).

может быть оффтоп, но:

заметил, что часто  примеры от Майкрософт пишутся в виде самодокументированных кодов, поэтому и пишут громоздкие конструкции, которые можно раскрыть и подменить конечным значением  ( ну типа вот видишь код, и все влёт понял  ))) )

ЗЫ: в примерах по C# к сожалению все не так, несколько раз писал на C# с уверенностью, что это, по сути, аналог С++ с некой склонностью обязательного применения ООП, оказалось, что все совсем не так, никакой это не С++, часто нельзя "добраться" до полей класса без кастинга к базовому классу, поэтому и нужно использовать длинные громоздкие конструкции, в общем разбор готовых библиотек под С# -  то еще приключение!

 

Обратите внимание, по умолчанию эти два флага применяются совместно deferred | async, что снимает ответственность с разработчика. Тут то речь об основной функции потока, ну да, можете в аргументах передать ей что угодно, в т.ч. и указатель на функцию, или функтор. А флаг deferred может подразумевать вообще синхронное выполнение этой функции. Ну вот, я же говорю, что плохо своими словами отвечаю на такие вопросы ) Каша получается. Обычно, все оставляешь по умолчанию и этими флагами просто не заморачиваешься, может это и не правильно.

 
Igor Makanu:

ЗЫ: в примерах по C# к сожалению все не так, несколько раз писал на C# с уверенностью, что это, по сути, аналог С++ с некой склонностью обязательного применения ООП, оказалось, что все совсем не так, никакой это не С++, часто нельзя "добраться" до полей класса без кастинга к базовому классу, поэтому и нужно использовать длинные громоздкие конструкции, в общем разбор готовых библиотек под С# -  то еще приключение!

Ну уж на Шпоры у МС оч неплохая документация. Все подробно расписано. Грех жаловаться
 
Vict:

Ну документация по этому поводу мало полезна

Нафига такое чудо надо - я не очень понимаю, я спокойно могу передать указатель на функцию в нужный мне поток и там его вычислить без всяких там async( std::launch::deferred).
Ну, например, тебе надо, что бы функция вычислила значения с текущими параметрами на стеке, но не сейчас и не в этой области видимости. Вот ты и создаешь std::asinc, но, вот засада, один из параметров - это ссылка или указатель на глобальную переменную, но в расчетах нужно будет не текущее значение этой переменной, а то, которое будет потом, вот для этого и сделаны битовые маски std::lounch::asinc и std::lounch:: deferred и дана возможность передать значение в функцию сейчас, а расчеты выполнить потом.
 
Vladimir Simakov:
Ну, например, тебе надо, что бы функция вычислила значения с текущими параметрами на стеке, но не сейчас и не в этой области видимости. Вот ты и создаешь std::asinc, но, вот засада, один из параметров - это ссылка или указатель на глобальную переменную, но в расчетах нужно будет не текущее значение этой переменной, а то, которое будет потом, вот для этого и сделаны битовые маски std::lounch::asinc и std::lounch:: deferred и дана возможность передать значение в функцию сейчас, а расчеты выполнить потом.

Ну так я могу взять функцию, которую передаю в async, забайндить к ней аргументы, и хранить до нужного момента, когда пора вызвать (или отправить другому потоку). Какая разница - хранить future или выхлоп от std::bind()?

Единственное разумное объяснение, которое приходит мне в голову - ручной контроль за количеством работающих потоков в пуле (если не доверяем дефолтному async|deferred) - например, видим что система сильна загружена, пересатаём отправлять задания с флагом async, шлём deferred.

Ну а в целом я несколько разочарован тормознутостью async(), будет время состряпаю свой легковесный пул потоков, мне кажется, что это будет много быстрее.