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

 
Реter Konow:

如果他们增加了多线程,会不会让你感觉更糟?因此,他们在MQL中增加了很多东西,这是一个非常有用的东西。但是,只有用MQL编写非常复杂、繁琐的程序的人,才能理解它的作用。如果你不明白为什么我们需要多线程,那就意味着你不会写这样的程序。当你这样做时,你就会明白。这很简单。))

多线程是绝对需要的,特别是在测试器中,尤其是在多仪器模式下。我经常缺乏表现。但我不是编程专家,对其中的微妙之处理解不深,我只知道我需要并行计算很多东西)。而并联测试器将是非常有用的。
 
Реter Konow:

如果他们增加了多线程,会不会让你更糟糕?

绝对不是--会更好的,!- 但这里的关键问题是支持--谁来解释如何使用它?- 谁来修复错误?- 谁将提供有保障的可理解的功能?

根据开发人员如何和谁使用MT的基本想法,他们提供了与C++相对应的功能,从而消除了培训和解释如何工作的 "头痛"--20年来网络上关于C++的文献和编写 入门级程序 的例子已经收集了很多

你有没有看到一个现成的包(根据TC的问题),可以应用于C++?

 
Igor Makanu:

"专家"?- 你没有什么可谈的,把你的imho...这是一个很大的MQL社区,有不同领域的专业人士,不幸的是,你没有展示任何对社区有用的知识,你可以指责我任何你想做的事情--"你是专家!"。"


开发商会怎么做?- 你甚至不能解释为什么需要它,是吗?)))

MetaQoutes的目的是什么?- 作为任何一家IT公司,我们的目标是赚取利润。我不知道为什么,MetaQoutes非常认真地推广其服务,已经做了很多工作来普及算法交易,提供分析材料,创建一个在线社区......只有少数IT公司做这种慈善,通常是IT巨头。

因此,该公司将其资源花在未来(不确定)会产生利润的东西上....。然后,瞧瞧......。一个用户出现了,他需要将弱智的Python或Java的概念适应于MQl....。你不觉得这很有趣吗?- 你多大了?))))


我尊敬的是,坚持往往是找到你生活中的利基的唯一途径!在这一艰苦的工作中,祝你好运!"。

在这个问题上,没有什么可以和你谈的!
你甚至没有足够的逻辑来理解MetaQuotes将从能够编写异步程序中获得什么有效的好处。
而且它将真正吸引专家,他们编写异步程序。
而且社区里有足够的专家,你可以和他们讨论问题和想法,而不是听你说 "我是专家"。
唉,要成为一个专家,你需要跟上技术的步伐,不管它是用什么语言。
你甚至没有听到有人告诉你,C++也是异步写的,但你可能不理解,你没有给自己设置异步任务。
而且让我们节制一下你的热情,你甚至不能正常交流。

 
Roman:

你才是那个在这个话题上无话可说的人!?

不说话,但还是没有回答。


回答交易终端 为什么需要这个问题?
 
Maxim Romanov:
多线程是绝对需要的,特别是在测试器中,尤其是在多仪器模式下。我经常缺乏表现。但我不是编程专家,也不太了解其中的奥妙,我只知道我需要计算很多东西,而且是并行的)。而并联测试器将是非常有用的。
而我要开发三维可视化,把它和计算、界面事件、外部事件(服务器调用)放在一个线程中是不合理的。该DLL不适合 始终 原因之一是--你不能自由分发程序。
 
Igor Makanu:

绝对不是--会更好的,!- 但这里的关键问题是支持--谁来解释如何使用它?- 谁来修复错误?- 谁来保证功能的可理解性?

...

从我的角度来看,这是最小的问题。最主要的是,人们会就这个话题进行交流。该论坛需要新的主题。不是吗?它只会变得更好。那么,如果在用户中出现问题和错误,什么才是关键?当没有的时候呢?)

 
Andrey Pogoreltsev:

你要求异步查询执行,但却引用了多线程作为例子......我敦促你弄清楚,但你从未这样做。

我在这里给了你一个解决你确切问题的方法:https://www.mql5.com/ru/forum/318593/page4#comment_12568119

但我确信你甚至没有研究过这个问题。

在我看来,如果你给你一个异步队列,你还是会要求多线程的...至少先试着处理一下OVERLAPPED和事件,你不是要求WinAPI进入你的代码吗)。

如果你把多线程引入终端,它将从可悲的程序员那里埋葬自己,比光速还要快。

程序员正在寻找问题的解决方案,而不是要求框架改变以适应他们的无知。

不,你错了,我都看了,一定会研究的。
顺便说一句,你是唯一一个至少给出了一些好的方向的人,谢谢你,其他的人都是在忽悠。
只是有很多人不了解这个话题的本质,这就是为什么我必须回答他们的问题。这就是为什么我必须回答他们的问题。 这就是为什么这个话题变得更大。
多线程或异步连接的技术有好几种,这就是为什么这么多的人不了解它。
而我不得不匆忙举出互联网上的例子,但即使是这些例子,也至少在某种程度上解释了该技术的本质。
没有人费心去展示其他技术并解释它们是如何工作的,一个合唱团。

 
Roman:

不不,你错了,我已经看完了,我会毫不含糊地调查的。
顺便说一句,你是唯一一个至少给出了一些真正的方向的人,谢谢你,其他人只是泛泛之辈。
只是有很多人不了解这个话题的本质,这就是为什么我必须回答他们的问题。这就是为什么我必须回答他们的问题。 这就是为什么这个话题变得更大。
而关于多线程或异步连接,有一些技术,这就是为什么很多人不了解。
而我不得不匆匆忙忙地从网上给出样本,但即使是这些样本,至少也能在某种程度上解释技术的本质。
没有人费心去展示其他技术并解释它们是如何工作的,一个合唱团。

多线程 - 任务在多个线程中运行。可以在单个处理器上运行,仍然是多线程,并在处理器时间配额用完时在它们之间切换。需要同步访问共享资源。可能导致死锁、竞赛条件、内存释放 错误和其他 "意外"。

异步--非阻塞的函数执行(即方法退出后立即返回控制),通常在其他设备(网络设备、存储设备、外围设备等)上。 例如,可以只用一个线程和终端机器处理客户端连接来编写高性能的多用户服务器。这完全取决于这个服务器的目的。

在你的案例中,你需要使用WinAPI创建大量的连接,你可以通过带有超时的WaitForMultipleObjects来检查这些连接的状态,所以你不需要保留一个定时器线程,比如说。

PS.理论上,也可以使用IOCompletionPort,但它需要更多的知识和精心设计。
 
Andrey Pogoreltsev:

多线程 - 任务在多个线程中运行。可以在单个处理器上运行,仍然是多线程,并在处理器时间配额用完时在它们之间切换。需要同步访问共享资源。 可能导致死锁、竞赛条件、内存释放 错误和其他 "意外"。

这真的有那么危险吗?记忆释放中的错误...然而,专家顾问在不同线程的不同图表上运行,没有出现意外故障。那么,分布在EA之间的任务不会导致关键错误,但分布在一个EA内部线程之间的任务会导致关键错误?当然,我不是这些方面的专家,但把EA之间的任务分配方法移到一个单一的EA中,有什么问题?也许有一个问题,我不争论。

 
Andrey Pogoreltsev:

多线程 - 任务在多个线程中运行。可以在单个处理器上运行,仍然是多线程,并在处理器时间配额用完时在它们之间切换。需要同步访问共享资源。可能导致死锁、竞赛条件、内存释放 错误和其他 "意外"。

异步--非阻塞的函数执行(即方法退出后立即返回控制),通常在其他设备(网络设备、存储设备、外围设备等)上。 例如,可以只用一个线程和终端机器处理客户端连接来编写高性能的多用户服务器。这完全取决于这个服务器的目的。

在你的案例中,你需要使用WinAPI创建大量的连接,你可以用带超时的WaitForMultipleObjects来检查这些连接的状态,所以你不必持有一个定时器线程,比如说。

PS.理论上,你也可以使用IOCompletionPort,但这需要更多的知识和清晰的设计。

现在,这是一个对话,我已经用asyncio做了非阻塞执行,但如果你在这里写上coroutine或calback这个词,会有很多混乱,我还是不说了 ))
我自己也知道非阻塞调用的原理,但只在python和还有一个C和C++库中知道。
我从来没有使用过WinAPI,我会研究它的,我在看其他的库,但这没有什么区别,主要的是理解语法,我明白那里是什么))。
但在谈话中,我建议在常规的mql中加入这样的功能,以便能够开箱即写异步代码。
我们开始感到困惑,因为我们不明白为了什么,为什么。因为这是因为 ))