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

 
亲爱的论坛用户。

要使用多线程,你必须首先学习异步、多线程和多进程执行之间的本质区别,因为你在某些地方甚至无法理解你的逻辑。首先。

其次,对外部DLL 的调用仍然存在,谁能阻止你用多线程实现自己的库并将其插入?

第三,在mql中,什么任务需要多线程?

更不用说你还得学习同步对象。你需要它吗?如果是这样,为你写一个dll是一件非常容易的事情。
 
Roman:

那么在DLL_PROCESS_ATTACH: 中初始化就可以从mql程序中调用了吗?

从mql程序中调用其位于dll中的函数。

 
Dmitry Fedoseev:

从mql程序中调用其位于dll中的函数。

而描述他们的签名有什么问题呢?你是通过方法签名来拉动winapi的,对吗?
 
Andrey Pogoreltsev:
那么描述他们的签名有什么问题呢?你不是通过方法签名以某种方式拉动winapi吗?

对不起,为什么要描述它们?我很抱歉,我没有拉到任何东西))

 
Dmitry Fedoseev:

对不起,为什么要描述它们?我很抱歉,我没有拉到任何东西))

对不起,我已经以为你在问了。
 
Andrey Pogoreltsev:
亲爱的论坛用户。

要使用多线程,你必须首先学习异步、多线程和多进程执行之间的本质区别,因为你在某些地方甚至无法理解你的逻辑。那是一个。

其次,对外部DLL 的调用仍然存在,谁能阻止你实现自己的多线程库并将其插入?

第三,你在mql上需要多线程的什么任务?

更不用说你还得学习同步对象。你需要它吗?如果你这样做,你就很容易写出一个dll。

Andrey,我想每个人都明白,异步和多线程是不同的东西。
由于CreateThread()函数在WinAPI inluder中被描述,所以人们认为可以使用线程。
IDE中没有描述类似于CreateTask()的函数,所以可能的异步代码编写的假设本身就消失了。
因此,重点放在了螺纹上。然而,事实证明,所描述的函数只是WinAPI的原型。
我再说一遍,任务是使用纯粹的WinAPI,描述的原型CreateThread()是误导性的。没有任何地方说这些是原型。
所有的任务都是不同的,所以我到了异步的方法,我相信总是异步地或在线程中写是更好的。
而养成总是异步写作的习惯,将使你能够写出快速的程序,并提高你作为专家的水平。
这是开发人员自己的基本原则,mql程序的执行速度,是我们的一切!"。

很遗憾,mql没有这样的功能。
我向mql管理部门提出一个建议,为异步编程开发标准的mql函数
因为存在线程问题,最重要的是安全问题。
对于异步模式,我认为不存在安全问题。

例子逻辑

在mql中实现EventLoop。
创建MqlTask类
将任务声明为MqlTask对象obj。
创建任务 task = obj.CreateTask(MyFunc())。
执行成功 = 任务 -> 运行()。
暂停执行成功 = 任务 -> SleepMs(ms)。
等待成功 = 任务 -> 等待(ms)。
无限期等待 success = task -> Wait(0);
在执行删除任务后,删除该任务。

和各种getStatuses来控制它。

 
Roman:

Andrey,我想大家都明白,异步模式和多线程是不同的东西。
WinAPI的inluder包含CreateThread()函数,我们曾假设可以使用线程。
由于IDE中没有描述类似于CreateTask()的函数,我们不应该考虑可能的异步代码编写。
因此,重点放在了螺纹上。然而,事实证明,所描述的函数只是WinAPI的原型。
我再说一遍,任务是使用纯粹的WinAPI,描述的原型CreateThread()是误导性的。没有任何地方说这些是原型。
所有的任务都是不同的,所以我得到了异步的。 我认为,最好总是异步或在线程中编写。
而养成的总是异步编写的习惯,将使你能够编写快速的程序,并提高你作为专家的水平。
这是开发人员自己的基本原则,mql程序的执行速度,是我们的一切!"。
可惜mql中没有这样的功能,所以我将向mql团队提出建议,开发一个标准的mql功能
异步编程,因为存在着线程的问题,最重要的是安全问题。
我认为异步模式不存在安全障碍。
制定出循环圈的实施方案,并在这些循环圈中执行任务。

决定你是要异步执行方法还是多线程执行方法。我使用套接字,例如,从mql异步工作。

这些都是签名,这一点马上就清楚了,我们在安全的虚拟执行环境上谈论的是什么内部实现?那么你是如何设想的呢?

再说一遍。那些知道如何处理线程的人将很容易为它写一个DLL,并在那里完成所有任务。

是的,如果我没记错的话,在mql中也有异步方法,用于创建相同的订单和网络工作。你还需要哪些方法来实现异步?那么所有这些的实用性如何呢?

你能给我一些一个线程的速度是不够的情况吗?
 
Andrey Pogoreltsev:
决定你是要异步执行方法还是多线程执行方法。例如,我从mql中异步地处理套接字。

这些都是签名,这一点马上就清楚了,我们在安全的虚拟执行环境上谈论的是什么内部实现?你又是如何设想的呢?

再说一遍。那些知道如何处理线程的人将很容易为它写一个DLL,并在那里完成所有任务。

是的,如果我没记错的话,mql有异步方法来创建相同的订单并与网络一起工作。你还需要哪些方法来实现异步?而这一切的实用性是什么?

你能给我们一些速度不够的情况下,在一个线程中工作吗?

为了确定哪些是可以在mql中使用的,哪些是禁止的。
在inludes中发现了 CreateThread(),所以我认为它可以与线程一起工作
但事实证明,线程是被禁止的,所以选择了异步,但如何在mql中使用异步也不清楚。
是的,这正是插座的问题所在。帮助说,可以创建不超过128个套接字,这限制了获得美国股票的信息,例如。
而即使是那些128个套接字,也不清楚如何将其转换为异步模式,并避免处理传入数据的延迟。
这就是为什么我不得不用另一种方式来寻找解决问题的方法,但我想用纯粹的WinAPI来解决这个问题,不需要任何自写的dll
而如何在mql中异步工作,这很有意思,如果你有什么工作实例,如果你能分享信息,讨论一下会很好。
但是mql帮助中的标准异步方法我还没有看到。

 
Roman:

为了确定哪些是可以在mql中使用的,哪些是禁止的。
我在代码的注入器中发现了 CreateThread(),所以我认为我可以处理线程
但事实证明,线程是被禁止的,所以选择了异步,但如何在mql中使用异步也不清楚。
是的,这正是插座的问题所在。帮助说,可以创建不超过128个套接字,这限制了获得美国股票的信息,例如。
而且,即使是那些128个套接字,也不清楚如何将其转换为异步模式,避免处理传入数据的延迟。
这就是为什么我不得不用另一种方式来寻找解决问题的方法,但我想用纯粹的WinAPI来解决这个问题,不需要任何自写的dll
而如何在mql中异步工作,这很有意思,如果你有什么工作实例,如果你能分享信息,讨论一下会很好。
但是mql帮助中的标准异步方法我还没有看到。

如果你想通过winapi与套接字进行异步工作,请使用winsock2。

试试WSARecv和WSASend与OVERLAPPED和 WSAEVENT

然后等待...
 

我读了聪明的参与者的文章,我想知道...

所有这些噱头的意义何在?

在MQL中,什么时候会非常需要多线程? 对我来说,唯一的用途是策略测试,这是以标准方式实现的。

理想情况下,运行几个WebRequests 可能是有意义的,但我认为根本不需要多线程。

哪些任务首先需要多线程?