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

 
Andrey Barinov:
...

Что можно глазами найти в таблице из 1000 рядов с помощью прокрутки? Какая задача решается?

P.S. Опять оффтопик пошел... 

Андрей, задача была дать пользователю возможность создать любую таблицу. Как в шарпе. Мало ли что ему в голову взбредет...))

Предлагаю закончить оффтопик.))


ЗЫ. Справедливости ради надо заметить, что можно перерисовывать только видимую часть таблицы, а невидимую перерисовывать только на событии прокрутки. Но повторю, это был стресс-тест.


ЗЫ. Все зависит от того, как именно меняются значения в таблице. Если значения меняются очень быстро и постоянно, то лучше перерисовывать только видимую область, а невидимую перерисовывать во время прокрутки. Если значения меняются не часто, то лучше перерисовывать все сразу, чтобы в момент начала прокрутки не возникла задержка из за перерисовки. Исходя из того, что точно нельзя знать как часто будут меняться значения в таблице, я выбрал универсальный метод - перерисовывать все сразу. Ведь редко встречаются громадные таблицы, в которых значения пляшут как бешенные. Поэтому, лучше перерисовывать сразу весь канвас и обойти задержку вначале прокрутки.

ЗЫЫ.  Вы видели сколько времени перерисовывается канвас 900*7000 пикселей? Эта задержка даже на МТ5 может достигать сотен миллисекунд. Получить такую задержку в момент начала прокрутки очень неприятно. Поэтому, если частота перерисовки небольшая, лучше рисовать все сразу.

Возвращаясь к топику - вот одна из причин необходимости многопоточности в МТ5!))


ЗЫЫЫ. На последок. Для того, чтобы обойти проблему с нагрузкой на процессор при слишком частой перерисовке больших таблиц, я выбрал другой путь. Сделал специальный регулятор скорости вывода изменения значений. То есть, значения меняются быстро, но пользователь регулирует скорость их вывода (перерисовки) слайдером (я его показывал). Таким образом, нагрузка на процессор снижается в разы и пользователю удобнее воспринимать информацию из таблицы.

 
Реter Konow:

Андрей, задача была дать пользователю возможность создать любую таблицу. Как в шарпе. Мало ли что ему в голову взбредет...))

Предлагаю закончить оффтопик.))


ЗЫ. Справедливости ради надо заметить, что можно перерисовывать только видимую часть таблицы, а невидимую перерисовывать только на событии прокрутки. Но повторю, это был стресс-тест.


ЗЫ. Все зависит от того, как именно меняются значения в таблице. Если значения меняются очень быстро и постоянно, то лучше перерисовывать только видимую область, а невидимую перерисовывать во время прокрутки. Если значения меняются не часто, то лучше перерисовывать все сразу, чтобы в момент начала прокрутки не возникла задержка из за перерисовки. Исходя из того, что точно нельзя знать как часто будут меняться значения в таблице, я выбрал универсальный метод - перерисовывать все сразу. Ведь редко встречаются громадные таблицы, в которых значения пляшут как бешенные. Поэтому, лучше перерисовывать сразу весь канвас и обойти задержку вначале прокрутки.

ЗЫЫ.  Вы видели сколько времени перерисовывается канвас 900*7000 пикселей? Эта задержка даже на МТ5 может достигать сотен миллисекунд. Получить такую задержку в момент начала прокрутки очень неприятно. Поэтому, если частота перерисовки небольшая, лучше рисовать все сразу.

Возвращаясь к топику - вот одна из причин необходимости многопоточности в МТ5!))


ЗЫЫЫ. На последок. Для того, чтобы обойти проблему с нагрузкой на процессор при слишком частой перерисовке больших таблиц, я выбрал другой путь. Сделал специальный регулятор скорости вывода изменения значений. То есть, значения меняются быстро, но пользователь регулирует скорость их вывода (перерисовки) слайдером (я его показывал). Таким образом, нагрузка на процессор снижается в разы и пользователю удобнее воспринимать информацию из таблицы.

Peter, а вы понимаете разницу между асинхронностью, могопоточностью и параллельностью?

 
Sergey Chalyshev:

Peter, а вы понимаете разницу между асинхронностью, могопоточностью и параллельностью?

Предлагаю привести пример асинхронной или параллельной работы в одном потоке. 
 
Реter Konow:
Предлагаю привести пример асинхронной или параллельной работы в одном потоке. 

Ок, Приводите!

 
Sergey Chalyshev:

Ок, Приводите!

Таких не знаю. 

Поток предлагает только последовательность, а параллельным в узкой последовательности быть сложно. Асинхронным внутри последовательности можно быть лишь умозрительно, оглядываясь на свои предыдущие проходы по кругу и отмечая новые изгибы старого маршрута, гордо считая, что идешь по новому пути...

Поймите, границы однопоточности не могут быть  преодолены смекалкой самоуверенного кодера, считающего, что через одну точку могут проходить бесчисленное множество параллельных линий. Эта неевклидова геометрия не помещается в реалии программы и асинхронности процессам внутри потока не прибавляет.
 
Sergey Chalyshev:

Ок, Приводите!

Хлопок одной лодонью ? дзен вовне это не дзен :-)

ну вот ты точно знаешь, что Петер не высовывается из песочницы. Он в принципе не может понять терминов

К чему такие вопросы ? ну да он начнёт флудить, как проф.репортер

 
Maxim Kuznetsov:

Хлопок одной лодонью ? дзен вовне это не дзен :-)

ну вот ты точно знаешь, что Петер не высовывается из песочницы. Он в принципе не может понять терминов

К чему такие вопросы ? ну да он начнёт флудить, как проф.репортер

Да зачем флудить. Я смеюсь. Ну, вот и приведите пример однопоточной асинхронности с паралельностью. Если кроме самообмана это что то дает, - признаю, что неправ.
 
Ребята, ну элементарная логика. Ну, как в одном потоке сделать что то асинхронное, перепрыгнув через единую последовательность действий? Только, если двигатся по кругу и на каждой итерации принимать решения, какие операции выполнять, а какие откладывать. Но, разве это нормальная асинхронность? Про параллельность вообще говорить не стоит. Какая может быть параллельность в одном потоке? ))

Два потока - две разделенные последовательности действий, асинхронные друг к другу. 
 
Реter Konow:
Ребята, ну элементарная логика. Ну, как в одном потоке сделать что то асинхронное, перепрыгнув через единую последовательность действий? Только, если двигатся по кругу и на каждой итерации принимать решения, какие операции выполнять, а какие откладывать. Но, разве это нормальная асинхронность? Про параллельность вообще говорить не стоит. Какая может быть параллельность в одном потоке? ))

Два потока - две разделенные последовательности действий, асинхронные друг к другу. 

Два, или двадцать два потока могут быть как синхронными, так и асинхронными. Один поток может включать как синхронные, так и асинхронные операции. Вы сами указали, как. Параллельные включать не умеет. 

 
Реter Konow:
Ребята, ну элементарная логика. Ну, как в одном потоке сделать что то асинхронное, перепрыгнув через единую последовательность действий? Только, если двигатся по кругу и на каждой итерации принимать решения, какие операции выполнять, а какие откладывать. Но, разве это нормальная асинхронность? Про параллельность вообще говорить не стоит. Какая может быть параллельность в одном потоке? ))

Два потока - две разделенные последовательности действий, асинхронные друг к другу. 

асинхронный вызов не обязательно приводит к созданию нового потока