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

 
Yuriy Asaulenko:


我开始重读这个话题,伊戈尔已经写过这个问题了。

Пишите dll (в которой Вы должны выделить память и зарегистрировать новый поток! - затем при выходе все аккуратно уничтожить!) и вызывайте ее из MQL

这就是我想说的,Yuri,我们需要分配内存并注册流量。
伊戈尔说你需要分配和注册,而你说你不需要做任何事情。
这就是我头晕的原因。其结果是陷入了僵局。

伊戈尔在大学里作为专家学习,他应该比我们这些自学成才的研究员了解更多。
我最初也倾向于同样的想法:分配内存和初始化。
初始化和内存分配 是正确编码的关键,因为它不能流动,也不能是垃圾。

所以我的问题是Igor,请解释一下在C++中如何做到这一点?
不是用语言,用例子,我什么都不懂 ))

BOOL APIENTRY DllMain( HMODULE hModule,
                       DWORD  ul_reason_for_call,
                       LPVOID lpReserved )
{
        switch (ul_reason_for_call)
        {
        case DLL_PROCESS_ATTACH:
        case DLL_THREAD_ATTACH:
        case DLL_THREAD_DETACH:
        case DLL_PROCESS_DETACH:
                break;
        }
        return TRUE;
}
 
Roman:

我开始重读这个话题,伊戈尔已经写了这个问题。

这就是我想说的,Yuri,我们应该分配内存并注册流量。

是的,我们当然会这样做。但DllMain与此无关)。- 这是为了别的事情。而不是为你。忘了它吧,最好是永远忘不了)。它对你来说不存在。
编写一个出口函数。其余部分与正常节目完全相同。你也需要在那里做同样的事情。
其余的以后再说,我已经睡着了))。
 
采取C#,因为C/C++对你来说太复杂了。
 
Roman:

我开始重读这个主题,伊戈尔已经写过这个问题了。

我最初也倾向于同样的想法:分配内存和初始化。
初始化和内存分配 是正确编码的关键,因为它必须不滴水不漏,没有垃圾。

所以我的问题是Igor,请解释一下在C++中如何做到这一点?

你正在巧妙地将这个主题推到讨论的顶端,试图吸引越来越多的参与者来解决你的问题))))。

不要断章取义。

- 我是在这样的背景下写的:如果你想了解WinAPI是如何工作的,你可以使用关于dll编写的现成的例子=这个资源上的20多篇文章

- 我是在这样的背景下写的,你可以通过替换你的系统程序员已经为你写好的插件来获得纯粹的WinAPI调用。

....

信件的重点:开始阅读和做事,而不是写作和写....。你将了解很多,你将了解什么和如何在Windows中工作,但这些知识不会被要求,从你作为应用程序的程序员只有机械的工作 - 选择项目的类型,添加你的代码,编译=得到的结果- 所有的工作为你做数百或数千的系统程序员。对模板和包含文件的任何修改都必须有意义--如果你不知道,打着 "为什么要写这么多代码,它已经在工作了!"的幌子。- 你会得到一个不可复制的错误和/或缺乏操作系统/PC的兼容性

 
Vladimir Simakov:
该职位是为创作者准备的。 巨魔走了。对于GUI来说,把OnChartEvent放在一个单独的线程中看起来不错。

为什么要打破开发者制定的模式?- MQL-程序模型简单明了,有事件 - 有处理这些事件的入口点(OnTick(),OnInit()....OnChartEvent() )

有可能从任何MQL程序中获得交易环境状态(甚至指标可以看到一个开放订单的利润,等等),并且有可能在同一个图表上结合专家顾问+脚本,专家顾问+用户指标 - 你得到MQL程序的异步执行,EA交易,指标显示图形可视化 - 如果用户指标 流的性能不够(他们在一个线程中工作),那么当然这是一个问题 - 你需要在两个图表上使用两个EA并安排他们的互动

再次--有一个具体的任务,有一个实现,我多次问为什么需要这个功能,但至今没有答案--只有关于三维可视化的空间推理....。而且没有讨论在哪里可以得到一些DirectX来进行3D工作;)

我认为,这很有效!)))

 
Igor Makanu:

为什么要打破开发者制定的模式?- MQL-程序模型简单明了,有事件 - 有处理这些事件的入口点(OnTick(),OnInit()....OnChartEvent() )

有可能从任何MQL程序中获得交易环境状态(甚至指标可以看到一个开放订单的利润,等等),并且有可能在同一个图表上结合专家顾问+脚本,专家顾问+用户指标 - 你得到MQL程序的异步执行,EA交易,指标显示图形可视化 - 如果用户指标 流的性能不够(他们在一个线程中工作),那么当然这是一个问题 - 你需要在两个图表上使用两个EA并安排他们的互动

再次--有一个具体的任务,有一个实现,我多次问为什么需要这个功能,但至今没有答案--只有关于3D可视化的空间推理....。而且没有讨论在哪里可以得到一些DirectX来进行3D工作;)

我认为,这很有效!)))

看。有一个按钮。你点击它。OnChartEvent进入队列。但在这个队列中,已经有了OnTick,在它之后还有OnTime,在它们之中,还有所有工具的CopyRate,在一秒钟内,这些工具被封锁并循环了一堆他妈的迭代。因此,如果按钮,例如,应该打开一个对话窗口,我们会得到一个迟钝的界面。当然,不是批评,但也不是好事。
 
Vladimir Simakov:
看。有一个按钮。你点击它。OnChartEvent进入队列。但在这个队列中,已经有了OnTick,在它之后还有OnTime,在它们之中,还有所有工具的CopyRate,在一秒钟内,这些工具被封锁并循环了一堆他妈的迭代。因此,如果按钮,例如,应该打开一个对话窗口,我们会得到一个迟钝的界面。当然,不是批评,但也不是好事。

GUI应该在主EA中旋转,其他一切都在一个单独的EA中。这个独立的从属EA被放在不可见的OBJ_CHART 上,与主EventSendCustom()路径互动。

它得到了类似多线程的东西。我已经这样实施了。

 
Vladimir Simakov:
看。有一个按钮。你点击它。OnChartEvent进入队列。但是在这个队列中已经有了OnTick,在它后面还有OnTime,在它们中还有所有工具的CopyRate,对于一秒钟来说,这就是锁定和循环的大量迭代。结果是,如果这个按钮,例如,应该打开一个对话窗口,我们就会得到一个迟缓的界面。当然,不是批评,但也不是好事。

我不知道OnChartEvent OnTick和OnTime,但开发人员写道,如果EA很忙,没有处理事件,这个事件不会创建一个队列,也就是说,它将只是一个tick或定时器跳过(OnChartEvent - 不知道,没有检查)。


开发者的逻辑在这里很简单,每个事件都是专家顾问的具体行动,但就是这个事件,我知道是肯定的,而且已经检查了不止一次(我更多的是在MT5的理论工作,我不知道ONTick的实际工作情况)。

关于MT4,我要明确地说:所有的交易操作 只能通过传入的tick进行,否则在10个案例中,你会收到服务器拒绝处理交易操作的通知。

即一个带有 "买 "按钮的接口已经实现 - 根据我们的想法,你按下 "买 "并立即发送一个订单,但它不会直接工作,你需要记住用户的命令(最好是阻止按钮,这样它就不会晃动)),并在嘀嗒声到来时,在OnTick() - 向服务器发送一个订单 - 这将在99%的情况下工作,即一个嘀嗒已经到来 - 你可以执行一个交易请求(不是从MQL的任何地方)。



如果我们在异步流程中引入OnChartEvent,我们会得到所执行代码的相互锁定吗?- 例如,在OnChartEvent中按下按钮就可以获得交易统计数据,而在OnTick中使用相同的函数(最后一笔亏损的交易)--这将是一件很严重的事情- 我认为,你不可能解决所有的问题!

 
Andrey Barinov:

GUI应该在主EA中旋转,其他一切都在一个单独的EA中。这个独立的从属EA被放在不可见的OBJ_CHART 上,与主EventSendCustom()路径互动。

它得到了类似多线程的东西。我已经这样实施了。

正是如此。由于缺乏女仆...这就是所谓的拐杖。
 
Igor Makanu:

我不知道OnChartEvent OnTick和OnTime,但开发人员写道,如果EA很忙,没有处理事件,这个事件不会创建一个队列,也就是说,它将只是一个tick或定时器跳过(OnChartEvent - 不知道,没有检查)。


开发者的逻辑在这里很简单,每个事件都是专家顾问的具体行动,但就是这个事件,我知道是肯定的,而且已经检查了不止一次(我更多的是在MT5的理论工作,我不知道ONTick的实际工作情况)。

关于MT4,我要明确地说:所有的交易操作 只能通过传入的tick进行,否则在10个案例中,你会收到服务器拒绝处理交易操作的通知。

也就是说,我已经创建了一个带有BUY按钮的界面--根据我的想法,你按下BUY并立即发送一个订单,但它不会直接工作,你需要记住用户命令(最好是阻止按钮,这样它就不会晃动)),并在OnTick()中的tick到达时--向服务器发送一个订单--这在99%的情况下会工作,即一个tick已经到来--你可以执行一个交易请求(不是从MQL的任何地方。)



如果我们在异步流程中引入OnChartEvent,我们会得到所执行代码的相互锁定吗?- 例如,在OnChartEvent中按下按钮就可以获得交易统计数据,而在OnTick中使用相同的函数(最后一笔亏损的交易)--这将是一件很严重的事情- 我认为,你不可能解决所有的问题!

同步是程序员的任务,如果你不知道怎么做,你就不会使用多线程。创作者的任务是给一个工具,然后每个人都是一个邪恶的鞋匠自己。同样的a la mutex也完全不是问题。