MQL中的异步和多线程编程 - 页 8 123456789101112131415...40 新评论 Roman 2019.07.25 18:41 #71 Dmitry Fedoseev: 似乎异步和多线程之间的特殊区别来自于困扰一些人的指针/引用差异问题的同一领域。 异步是通过一个单独的线程实现的,这个过程是否由处理器或其他设备提供并不重要。一个进程的创建意味着它的异步性,因为它是平行存在的。 异步是在同一个程序执行 线程中,通过EventLoop实现的,但如何实现EventLoop是开发者的特权,如何实现它。 在mql中,同样的标准处理程序,例如OnTimer在它自己的循环中工作,这就是一种EventLoop。 如果你想为异步方法创建一个单独的处理程序,所有的任务都将在异步循环中完美执行。 Dmitry Fedoseev 2019.07.25 19:08 #72 Roman: 异步是通过EventLoop在同一个程序执行 线程中实现的,但EventLoop如何实现,是开发者的特权,如何实现它。 在mql中,同样的标准处理程序,例如OnTimer在它自己的循环中工作,这就是一种EventLoop。 如果你想为异步方法创建一个单独的处理程序,所有的任务都将在异步循环中完美执行。 请问,通过EventLoop实现的异步在哪里? 你现在可以自己做类似EventLoop的事情,这里完全不需要终端开发者。 Roman 2019.07.25 19:27 #73 Dmitry Fedoseev: 请问,通过EventLoop实现的异步在哪里? 你现在可以自己做类似EventLoop的事情,这里根本不需要终端开发者。 EventLoop是在asyncio中实现的,我想其他的异步库中也使用了同样的原理。 据我所知,即使是WinAPI,也使用了异步的事件原则。 目前,我们无法使用标准工具实现成熟的异步模式。 原因是,例如OnTimer处理程序不控制任务执行,而是按顺序执行循环。 也就是说,处理程序缺乏异步任务执行的机制。 Roffild 2019.07.25 20:17 #74 每个人都谷歌一下僵局的概念! 在MQL5中,增加线程会破坏测试系统,整个代理云会崩溃。 通过DLLs可以解决这一限制。如果你不想学习C#、C++、C、Python - 那是你的问题。在今天的世界里,一个程序员必须知道几种语言,以便为某项任务正确地选择一种工具。 知道1C的人不被认为是程序员。MQL5的情况也是如此。 Реter Konow 2019.07.25 20:25 #75 Roffild: 每个人都谷歌一下僵局的概念! 在MQL5中,增加线程会破坏测试系统,整个代理云会崩溃。 通过DLLs可以解决这一限制。如果你不想学习C#、C++、C、Python - 那是你的问题。在今天的世界里,一个程序员必须知道几种语言,以便为某项任务正确选择工具。 知道1C的人不被认为是程序员。MQL5的情况也是如此。 如果多线程的MQL程序破坏了测试系统,那么不管是通过DLL还是普通的DLL连接,都有什么区别?在任何情况下,你都必须在测试和多线程之间做出选择。但最好是在MQL内选择,因为完整性是该程序的一个优点。 Dmitry Fedoseev 2019.07.25 20:26 #76 Roffild: 每个人都谷歌一下僵局的概念! 在MQL5中,增加线程会破坏测试系统,整个代理云会崩溃。 通过DLLs可以解决这一限制。如果你不想学习C#、C++、C、Python - 那是你的问题。在今天的世界里,一个程序员必须知道几种语言,以便为某项任务正确地选择一种工具。 知道1C的人不被认为是程序员。MQL5的情况也是如此。 在测试时,所有的任务都可以逐一解决,结果可以在某些时刻返回(你可以在测试器中等待)。不仅你可以,而且你必须,这样才能与现实相符。 我不知道1C的程序员们是怎么想的?他们对别人的意见感兴趣吗? Реter Konow 2019.07.25 20:34 #77 Реter Konow: 如果多线程的MQL程序破坏了测试系统,那么不管是通过DLL还是普通的DLL连接,又有什么区别呢?在任何情况下,你都必须在测试和多线程之间做出选择。但最好是在MQL内选择,因为完整性是该程序的一个优点。 一般来说,在正常模式下需要多线程。测试总是在一个小的程序模块--策略中进行,而程序的所有其他能力都有一个休息。视觉化等等。因此,在测试期间,只有策略模块所在的那个线程在运行。在测试器中,一些常规功能和事件被禁用,所以让线程也被禁用。 Roffild 2019.07.25 20:53 #78 Реter Konow: 如果多线程的MQL程序破坏了测试系统,通过DLL或直接链接有什么区别?在任何情况下,你都必须在测试和多线程之间做出选择。但最好是在MQL内选择,因为完整性是该程序的一个优点。 这是有区别的。云中不允许使用DLLs。而DLLs本身从一开始就被禁用。通过启用DLLs的权限,你就放弃了安全执行代码的责任。 Dmitry Fedoseev 2019.07.26 04:22 #79 Roman: EventLoop是在asyncio中实现的,我相信在其他异步库中也使用了同样的原理。 ... 其他异步库不使用这一原则。 Roman 2019.07.26 06:06 #80 Dmitry Fedoseev: 其他异步库不使用这一原则。 这只是一个猜测,我没有检查过它在其他地方的使用情况。 我搜索了一下哪些语言使用EventLoop,是Py、JS、Qt,可能还有一些。 问题的关键不是在哪里应用,而是在技术本身不使用线程。 那么,为什么不借用这个技术,在mql中实现你的EventLoop呢? 123456789101112131415...40 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
似乎异步和多线程之间的特殊区别来自于困扰一些人的指针/引用差异问题的同一领域。
异步是通过一个单独的线程实现的,这个过程是否由处理器或其他设备提供并不重要。一个进程的创建意味着它的异步性,因为它是平行存在的。
异步是在同一个程序执行 线程中,通过EventLoop实现的,但如何实现EventLoop是开发者的特权,如何实现它。
在mql中,同样的标准处理程序,例如OnTimer在它自己的循环中工作,这就是一种EventLoop。
如果你想为异步方法创建一个单独的处理程序,所有的任务都将在异步循环中完美执行。
异步是通过EventLoop在同一个程序执行 线程中实现的,但EventLoop如何实现,是开发者的特权,如何实现它。
在mql中,同样的标准处理程序,例如OnTimer在它自己的循环中工作,这就是一种EventLoop。
如果你想为异步方法创建一个单独的处理程序,所有的任务都将在异步循环中完美执行。
请问,通过EventLoop实现的异步在哪里?
你现在可以自己做类似EventLoop的事情,这里完全不需要终端开发者。
请问,通过EventLoop实现的异步在哪里?
你现在可以自己做类似EventLoop的事情,这里根本不需要终端开发者。
EventLoop是在asyncio中实现的,我想其他的异步库中也使用了同样的原理。
据我所知,即使是WinAPI,也使用了异步的事件原则。
目前,我们无法使用标准工具实现成熟的异步模式。
原因是,例如OnTimer处理程序不控制任务执行,而是按顺序执行循环。
也就是说,处理程序缺乏异步任务执行的机制。
每个人都谷歌一下僵局的概念!
在MQL5中,增加线程会破坏测试系统,整个代理云会崩溃。
通过DLLs可以解决这一限制。如果你不想学习C#、C++、C、Python - 那是你的问题。在今天的世界里,一个程序员必须知道几种语言,以便为某项任务正确地选择一种工具。
知道1C的人不被认为是程序员。MQL5的情况也是如此。
每个人都谷歌一下僵局的概念!
在MQL5中,增加线程会破坏测试系统,整个代理云会崩溃。
通过DLLs可以解决这一限制。如果你不想学习C#、C++、C、Python - 那是你的问题。在今天的世界里,一个程序员必须知道几种语言,以便为某项任务正确选择工具。
知道1C的人不被认为是程序员。MQL5的情况也是如此。
每个人都谷歌一下僵局的概念!
在MQL5中,增加线程会破坏测试系统,整个代理云会崩溃。
通过DLLs可以解决这一限制。如果你不想学习C#、C++、C、Python - 那是你的问题。在今天的世界里,一个程序员必须知道几种语言,以便为某项任务正确地选择一种工具。
知道1C的人不被认为是程序员。MQL5的情况也是如此。
在测试时,所有的任务都可以逐一解决,结果可以在某些时刻返回(你可以在测试器中等待)。不仅你可以,而且你必须,这样才能与现实相符。
我不知道1C的程序员们是怎么想的?他们对别人的意见感兴趣吗?
如果多线程的MQL程序破坏了测试系统,那么不管是通过DLL还是普通的DLL连接,又有什么区别呢?在任何情况下,你都必须在测试和多线程之间做出选择。但最好是在MQL内选择,因为完整性是该程序的一个优点。
如果多线程的MQL程序破坏了测试系统,通过DLL或直接链接有什么区别?在任何情况下,你都必须在测试和多线程之间做出选择。但最好是在MQL内选择,因为完整性是该程序的一个优点。
这是有区别的。云中不允许使用DLLs。而DLLs本身从一开始就被禁用。通过启用DLLs的权限,你就放弃了安全执行代码的责任。
EventLoop是在asyncio中实现的,我相信在其他异步库中也使用了同样的原理。
...
其他异步库不使用这一原则。
其他异步库不使用这一原则。
这只是一个猜测,我没有检查过它在其他地方的使用情况。
我搜索了一下哪些语言使用EventLoop,是Py、JS、Qt,可能还有一些。
问题的关键不是在哪里应用,而是在技术本身不使用线程。
那么,为什么不借用这个技术,在mql中实现你的EventLoop呢?