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

 
Реter Konow:

它真的那么危险吗?记忆释放中的错误...

这个例子涉及到在Windows中捕获设备上下文和分配资源的一般原则,当独立线程编程时,开发者必须确保设备上下文和资源在操作系统需要时被释放,如果开发者使用低级别的命令,他们必须自己释放所有使用的资源...在这里再次提到我写的观点--使用谷歌信息 "Hello World "https://www.mql5.com/ru/forum/318593/page5#comment_12572558, 写一次 你会明白很多,你会明白99%的工作是由系统程序员完成的。

即在MQL环境中工作--Metakvot的程序员为你做的--他们确保终端在MQL-程序不能正常工作的情况下也能工作。

 
Andrey Pogoreltsev:

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

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

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

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

嗯...你们已经找到了对方。

 
也许人们没有足够的维生素或微量营养素...
 
Roman:

谢谢你内容丰富的答复))
继续解释那里有什么,在哪里。
那么如何通过标准手段用Eventloop 编写异步代码呢?

这一切都在文件中。

你可以从阅读开始,试着写点东西。

如果你不能,你可以在论坛上问。

到目前为止,我们没有谈论任何事情。


 
Koldun Zloy:

这一切都在文件中。

你可以从阅读开始,试着写点东西。

如果你不能,你可以在论坛上问。

到目前为止,我们没有谈论任何事情。


你认为这个话题是为了什么而设立的?
你告诉我们如何以常规方式写异步代码,并在文档中展示。
除了异步请求的发送,显示哪里有Callback功能,哪里控制EventLoop,哪里有Wait,等等。
我相信你将无法回答这个问题,因为对用户来说没有这样的功能,而且文档中也没有。
确切地说,谈话是关于什么的,这里唯一的人是Andrey Pogoreltsev,他了解沟通的主题。

 
Euentloop!有人有Euentloop吗?在这里,一个人没有Euentloop就不会好!谁给我一个Euentloop!
 

罗曼, 2019.07.27 09:30

你认为这个话题是为了什么而设立的?


你问的是多线程。没有任何。

但这也不是你现在需要担心的问题。

罗曼, 2019.07.27 09:30

你告诉我们如何用标准手段写异步代码,并在文档中展示。
除了异步请求发送,告诉我们哪里有Callback功能,哪里控制EventLoop,哪里有Wait,等等。
我相信你无法给出答案,因为对用户来说没有这样的功能,而且文档中也没有。
确切地说,谈话是关于什么的,这里唯一的人是Andrey Pogoreltsev,他了解沟通的主题。

我可以向你展示这一切。但这有什么意义呢?

如果你需要它,你会自己找到它。

很明显,你没有读过文件或文章。
 
Koldun Zloy:

你问的是多线程。没有多线程。

多线程就像https://www.mql5.com/ru/docs/runtime/running , 即我们想把任务并行化,打开几个图(不幸的是我还没有尝试使用服务功能--也许有了这些功能会更容易?),并将我们在独立线程中工作的EA附加到它们身上,然后解决同步和数据交换的问题(任务)。

我问过TS五次--为什么交易终端需要它...他不知道,因为没有具体的任务或目的

我在客户-服务器应用中看到,这对交易终端来说并不典型,也许有人将统计数据发送到服务器是很方便的?- 嗯,我已经写了一个现成的例子(文章)https://www.mql5.com/ru/articles/5337

资料来源具有可读性,文章质量很好;资料来源可以修改为在几个线程中进行并行计算....。现在我们应该怎么计算?)))

 
Igor Makanu:

这个例子涉及到在Windows中捕获设备上下文和分配资源的一般原则,当独立线程编程时,开发者必须确保在操作系统要求时释放设备上下文和资源,如果开发者使用低级别的命令,他必须自己释放所有使用的资源...在这里再次提到我写的观点--使用谷歌信息 "Hello World "https://www.mql5.com/ru/forum/318593/page5#comment_12572558 写一次 你会明白很多,你会明白99%的工作是由系统程序员完成的。

换句话说,在MQL环境中工作的Metakvot程序员为你做的 - 他们确保了终端的稳定运行与MQL-程序的不充分工作

好了,没有争论,相信了。对于自学成才的编码员来说,自己把线程弄好可能并不可行,而且会导致关键性的错误。"火柴不是儿童的玩具"。然而,我们需要一些方法来实现单一程序内的多线程。

有一个简单的逻辑:服务的顺序启动不会导致错误,每个服务在其线程中运行。因此,该机制已经被配置和调试好了。很好。我们需要向前迈出一步:将这些服务写入专家顾问的代码中的特殊模块。每个模块将是相同的服务。然后,我们应该依次编译这些模块并同时运行它们。就这样了。

从本质上讲,没有任何变化。只有服务将被写入猫头鹰代码内。他们将以同样的方式进行编译和工作。当EA从图表中删除时,它们将被删除。通过这种方式,我们得到了一个多线程的EA。

 
你可以把它变得更简单。专家顾问自己加载所需的服务,这些服务是单独编写的。当从图表中移除时,它就会阻止它们。唯一要做的是添加专家顾问的服务开始。而线程之间的内部互动是程序员的任务。它是在资源的帮助下解决的。