MQL中的异步和多线程编程 - 页 39

 
Andrey Barinov:
...

在一个有1000行的表格中,通过滚动可以用眼睛找到什么?解决的是什么问题?

P.S. 又跑题了...

安德鲁,任务是允许用户创建任何表格。像在夏普。你永远不知道他可能有什么想法......))。

我建议我们结束这个话题))。


公平地说,你只能重绘表格的可见部分,而且只能在滚动事件中重绘不可见部分。但同样,这是一个压力测试。


这完全取决于表中的数值到底是如何变化的。如果数值变化非常快且不断变化,那么最好只重绘可见区域,在滚动过程中重绘不可见区域。如果数值变化不频繁,最好是一次性重绘,这样在开始滚动的时候,就不会因为重绘而出现延迟。因为你永远不知道表格中的数值到底会有多大的变化,所以我选择了一种通用的方法--一次性重绘。你不会看到太多数值疯狂跳动的表格,所以最好一次就把它们重新画出来。所以,最好是一次性重绘整个画布,绕过滚动开始时的延迟。

你见过重绘一个900*7000像素的画布需要多长时间吗?即使是MT5,这种延迟也能达到数百毫秒。 当你开始滚动时,得到这样的延迟是非常令人不快的。因此,如果重绘的频率很低,最好是一次性绘制。

回到主题--这就是MT5需要多线程的原因之一!)


最后一件事。为了避免经常重绘大表时处理器过载的问题,我选择了另一种方式。我做了一个特殊的调节器来调整数值变化的速度。也就是说,数值变化很快,但用户用滑块调节其输出(重绘)的速度(我展示过)。因此,处理器的负荷有时会减少,用户更方便地从表中感知信息。

 
Реter Konow:

Andrei,任务是允许用户创建任何表格。就像在夏普一样。你永远不知道他的脑子里会有什么东西......))

我建议完成离题))。


公平地说,你只能重绘表格的可见部分,你只能在滚动事件中重绘不可见部分。但同样,这也是一个压力测试。


SZY.这完全取决于表格中的数值究竟如何变化。如果数值变化非常快且不断变化,那么最好只重绘可见区域,在滚动过程中重绘不可见区域。如果数值变化不频繁,最好是一次性重绘,这样在开始滚动的时候,就不会因为重绘而出现延迟。因为你永远不知道表格中的数值到底会有多大的变化,所以我选择了一种通用的方法--一次性重绘。你不会看到太多数值疯狂跳动的表格,所以最好一次就把它们重新画出来。所以,最好是一次性重绘整个画布,绕过滚动开始时的延迟。

你见过重绘一个900*7000像素的画布需要多长时间吗?即使是MT5,这种延迟也能达到数百毫秒。 当你开始滚动时,得到这样的延迟是非常令人不快的。因此,如果重绘的频率很低,最好是一次性绘制。

回到主题--这就是MT5需要多线程的原因之一!)


最后一件事。为了避免经常重绘大表时处理器过载的问题,我选择了另一种方式。我做了一个特殊的调节器来调整数值变化的速度。也就是说,数值变化很快,但用户用滑块调节其输出(重绘)的速度(我展示过)。因此,处理器的负荷有时会减少,用户更方便地从表中感知信息。

彼得,你了解异步、多线程和并行之间的区别吗?

 
Sergey Chalyshev:

彼得,你了解异步、多线程和并行之间的区别吗?

我建议你举一个单线程的异步或并行操作的例子。
 
Реter Konow:
我建议在同一个线程中给出一个异步或并行操作的例子。

好了,开始吧!

 
Sergey Chalyshev:

好了,开始吧!

我不知道有什么。

流动只提供一个序列,而在一个狭窄的序列中很难做到平行。一个人只能在一个序列中投机地异步,回顾自己以前的迂回经过,注意到旧路线上的新转折,自豪地认为自己在走一条新路......。

要明白,单线程的局限性不是一个自以为是的编码员的聪明才智所能克服的,他认为无数的平行线可以通过一个点。这种非欧几里得几何学不符合程序的实际情况,也没有给线程内部的进程增加异步性。
 
Sergey Chalyshev:

好了,开始吧!

单手鼓掌? 禅宗向外不是禅宗 :-)

嗯,你知道一个事实,那就是彼得远离了沙盒。他基本上不能理解这些条款。

这样的问题有什么意义呢? 好吧,他将开始像一个专业记者一样喋喋不休。

 
Maxim Kuznetsov:

用一只手鼓掌? 禅宗向外不是禅宗:-)

嗯,你知道一个事实,那就是彼得远离了沙盒。他基本上不能理解这些条款。

问这样的问题有什么意义?

他为什么会失误呢?我在笑。好吧,那么给我一个单线程异步与并行的例子。如果这不是自取灭亡,我承认我错了。
 
伙计们,好吧,基本的逻辑。那么,如何在一个线程中做出异步的东西,跳过一个动作序列?唯一的方法是在一个圆圈中移动,并在每次迭代时决定执行哪些操作,哪些操作要推迟。但这是正常的不同步吗?我们根本就不应该谈及平行主义。我们在一个线程中可以有什么样的并行性?))

两个线程--两个独立的动作序列,相互之间是异步的。
 
Реter Konow:
嗯,伙计们,这是基本的逻辑。那么,一个线程怎么能做异步的事情,跳过一个操作序列?唯一的方法是在一个圆圈中移动,并在每次迭代时决定执行哪些操作,哪些操作要推迟。但这是正常的不同步吗?我们根本就不应该谈及平行主义。我们在一个线程中可以有什么样的并行性?))

两个线程是两个分离的动作序列,彼此之间是异步的。

两个,或二十二个线程可以是同步的或异步的。一个单线程可以包括同步和异步操作。你已经指出了如何。平行的不知道如何包括平行的。

 
Реter Konow:
伙计们,好吧,基本的逻辑。那么,如何在一个线程中做出异步的东西,跳过一个动作序列?唯一的方法是在一个圆圈中移动,并在每次迭代时决定执行哪些操作,哪些操作要推迟。但这是正常的不同步吗?我们根本就不应该谈及平行主义。我们在一个线程中可以有什么样的并行性?))

这两个线程是两个分离的行动序列,彼此之间是异步的。

异步调用不一定会创建一个新的线程