MQL中的异步和多线程编程 - 页 19 1...121314151617181920212223242526...40 新评论 Реter Konow 2019.07.27 11:27 #181 Igor Makanu:... 再次回答这个问题:为什么交易终端需要这个?... 终端是否在一个线程中工作?如果是在多个线程中,这就是需要它的原因吗?)) Igor Makanu 2019.07.27 11:32 #182 Реter Konow: 有很多推理要做。 嗯,你也去那里吗?- 你写了很多,但你不读书,也不想发展?- 你不会有时间在我的链接,不仅要了解文章,甚至阅读,这是我发现的最新,这是我的代码上的 "3屏长老",写给某人,我有一个代码结构总是约(前提是不会进一步修改,改变基本逻辑,有代码...最好不要记住对最初的线性结构化代码 可以做什么(( )))。 void OnTick() { int takeprofit,stoploss,hstart=0; double lot,h[]; CopyClose(symbol,PeriodSecondary,hstart,HistoryCount,h); ENUM_CMD CMD1,CMD2,CMD3; CMD1 = ind1(); CMD2 = ind2(); CMD3 = ind3(); if(NewBar()) { DeleteOrdersLimits(Magic); if(CMD1==CMD_BUY && CMD2==CMD_BUY && CMD3==CMD_BUY) { CalcTakeProfitStopLoss(takeprofit,stoploss); lot=CalcLot(stoploss); if(ReversSignal)SELL_STOP_PR(Low[1],lot,Magic,stoploss,takeprofit); else BUY_STOP_PR(High[1],lot,Magic,stoploss,takeprofit); } if(CMD1==CMD_SELL && CMD2==CMD_SELL && CMD3==CMD_SELL) { CalcTakeProfitStopLoss(takeprofit,stoploss); lot=CalcLot(stoploss); if(ReversSignal)BUY_STOP_PR(High[1],lot,Magic,stoploss,takeprofit);else SELL_STOP_PR(Low[1],lot,Magic,stoploss,takeprofit); } } } //+------------------------------------------------------------------+ 下面将是所有的服务功能,但主要的代码--TC本身的可读性和最线性的逻辑,我总是这样写,在大学里老师只接受这样的来源作为上交的工作,否则你将不能通过))))。 有什么意义?- 我想再说一次:只有在没有其他解决方案的情况下才应该使用多线程,没有一个足够的程序员会随便去用异步操作来工作!我想说的是,多线程是一个很好的选择。- 好痛啊)))) 一个例子将来自你:回答为什么一个交易终端需要它? Koldun Zloy 2019.07.27 11:35 #183 Yuriy Asaulenko: 是的,他们在码头上,但实际上他们不在。 就我的理解而言。 沃尔昌斯基写了这封信,雷纳特给他回了信。 一般来说,我很难想象为什么在一个单线程的程序中,在不与第三方软件互动的情况下,需要回调。 我现在已经试过了。一切都在运作。 尽管它们在MQL中没有实际用途。 Yuriy Asaulenko 2019.07.27 11:37 #184 Igor Makanu: 回答为什么交易终端需要这个问题? 他们都忘记了多线程的开销。而且它们不是无足轻重的)。 Реter Konow 2019.07.27 11:38 #185 Igor Makanu:... 一个例子是来自你的:回答交易终端为什么需要这个问题? 我已经回答过你了。你正在忽视。 1.我需要多线程,因为我的程序要复杂得多。我想在一个程序中结合很多重的功能。三维可视化,服务器通信,GUI,以及各种计算。单一的线程是不够的。因此,我必须把程序分成几个部分,或者使用本地多线程。如果没有,那我就把节目分成几部分。 2.终端自己是多线程的。问问它的开发者,为什么它需要多线程。为什么我需要多线程--见第1点。 [删除] 2019.07.27 11:39 #186 Igor Makanu 你的例子:回答为什么交易终端需要这个问题? 嗯,最明显的是一个独立的接口线,对金丝雀来说尤其关键,虽然我自己没有。 ZS:我并不提倡多线程,如果有的话。 Igor Makanu 2019.07.27 11:54 #187 Реter Konow: 我已经回复了你。你正在忽视。 1.我需要多线程,因为我的程序要复杂得多。我想在一个程序中结合很多很重的功能。三维可视化,服务器通信,GUI,以及各种计算。单一的线程是不够的。所以,我必须把程序分成几个部分,或者使用内置的多线程。如果没有,那我就把程序分成几部分。 2) 终端本身是多线程的。为什么它需要多线程--问它的开发者。为什么我需要多线程--见第1点。 你也忽略了别人告诉你的,我已经写过了:苍蝇分开--切糕分开!GUI和交易策略不能在一个代码中执行!这是不可能的。 在你关于图形界面的方法的话题中,有人告诉你,你的代码是低效的,你认为通过把函数抛出到一个单独的线程中,你会提高性能?- 它不会提高性能,但会造成现在同步所有东西的额外麻烦,))))。 记得在4pd上关于安卓-设备的主题中,用户只通过自由内存的数量来确信固件版本的有效性,而且恰恰相反--自由内存越多,固件越酷,但不幸的是,没有理解操作系统必须有效地使用所有资源--包括内存,如果有很多自由内存,不一定操作系统有效地使用资源。 所以在你的案例中,你无法在一个线程中实现性能,所以你需要更多的线程- 也许这与语言的能力(平台、操作系统......)无关,而是与开发者有关?- 也许他的效率并不高?我检查了文章系列中的GUI和去年KB中的GUI,我没有看到任何明显的滞后,一切都在一个良好的水平上工作。我看了那些代码的源代码,界面元素的遍历方案,OOP方法本身--都与Windows中的图形原理非常相似--为什么对他们有效而对你无效?))))))- 也许最初的方法毕竟不正确,或者你的理论背景两只爪子都是瘸的? Реter Konow 2019.07.27 12:11 #188 Igor Makanu: 你也忽略了别人告诉你的,我已经写过了:苍蝇分开--小刀分开!GUI和交易策略不应该在同一代码中执行!"。 在你关于图形界面的方法的话题中,有人告诉你,你的代码是低效的,你认为通过把函数抛出到一个单独的线程中,你会提高性能?- 它不会提高性能,但会造成现在同步所有东西的额外麻烦,))))。 记得在4pd上关于安卓-设备的主题中,用户只通过自由内存的数量来确信固件版本的有效性,而且恰恰相反--自由内存越多,固件越酷,但不幸的是,没有理解操作系统必须有效地使用所有资源--包括内存,如果有很多自由内存,不一定操作系统有效地使用资源。所以在你的案例中,你无法在一个线程中实现性能,所以你需要更多的线程- 也许这与语言的能力(平台、操作系统......)无关,而是与开发者有关?- 也许他的效率并不高?我检查了文章系列中的GUI和去年KB中的GUI,我没有看到任何明显的滞后,一切都在一个良好的水平上工作。我看了那些代码的源代码,界面元素的遍历方案,OOP方法本身--都与Windows中的图形原理非常相似--为什么对他们有效而对你无效?))))))- 也许最初的方法毕竟是错误的? 或者是理论上的训练两只爪子都很蹩脚? 是什么让你认为某些东西效率低下或对我不起作用?到我的资料中去看看事情是如何进行的。正是因为事情在运行和发展,我才认为对多线程的需求迫在眉睫。 Yuriy Asaulenko 2019.07.27 12:22 #189 Vict: 好吧,最明显的是一个独立的接口线,对guini来说尤其关键,尽管我自己没有这个。 ZS:我并不提倡多线程,如果有的话。 那么,你在市场上没有产品。那么为什么要用MKL做一个GUI呢,因为用C#就可以很容易地做出来,现在C#很容易连接到MKL。而那个GUI已经在其自身的线程中运行。 Roman 2019.07.27 12:31 #190 Igor Makanu: void OnTick() { MqlTask obj1; MqlTask obj2; MqlTask obj3; MqlTask obj4; int takeprofit,stoploss,hstart=0; double lot,h[]; bool success = false; CTask *task1 = obj1.CALLBACK_FUNC(CopyClose(symbol,PeriodSecondary,hstart,HistoryCount,h)); //Выполняется асинхронно в пуле потоков success = task1 -> Run(); success = task1 -> Wait(0); ENUM_CMD CMD1,CMD2,CMD3; CMD1 = ind1(); CMD2 = ind2(); CMD3 = ind3(); if(NewBar()) { CTask *task2 = obj2.CALLBACK_FUNC(DeleteOrdersLimits(Magic)); //Выполняется асинхронно в пуле потоков success = task2 -> Run(); success = task2 -> Wait(0); if(CMD1==CMD_BUY && CMD2==CMD_BUY && CMD3==CMD_BUY) { CTask *task3 = obj3.CALLBACK_FUNC(CalcTakeProfitStopLoss(takeprofit,stoploss)); //Выполняется асинхронно в пуле потоков success = task3 -> Run(); success = task3 -> Wait(0); lot=CalcLot(stoploss); if(ReversSignal)SELL_STOP_PR(Low[1],lot,Magic,stoploss,takeprofit); else BUY_STOP_PR(High[1],lot,Magic,stoploss,takeprofit); } if(CMD1==CMD_SELL && CMD2==CMD_SELL && CMD3==CMD_SELL) { CTask *task4 = obj4.CALLBACK_FUNC(CalcTakeProfitStopLoss(takeprofit,stoploss)); //Выполняется асинхронно в пуле потоков success = task4 -> Run(); success = task4 -> Wait(0); lot=CalcLot(stoploss); if(ReversSignal)BUY_STOP_PR(High[1],lot,Magic,stoploss,takeprofit);else SELL_STOP_PR(Low[1],lot,Magic,stoploss,takeprofit); } } delete task1; //Очищаем ресурсы delete task2; delete task3; delete task4; } //+------------------------------------------------------------------+ 下面是一个在一个线程中编写线性异步代码的例子。 假设EventLoop功能是在mql中实现的,并由ThreadPool开发者实现。 用户不需要进入线程!开发人员应该处理好这个问题,并编写相应的类。 该程序在一个单线程中运行,而常规的非阻塞式拼接则在一个线程池中执行。 现在将你在colbacks中的简单函数替换为计算量大或需要并发的函数。 巨方便,一切并行)) 附加的文件: node.js.png 48 kb 1...121314151617181920212223242526...40 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
...
再次回答这个问题:为什么交易终端需要这个?
...终端是否在一个线程中工作?如果是在多个线程中,这就是需要它的原因吗?))
有很多推理要做。
嗯,你也去那里吗?- 你写了很多,但你不读书,也不想发展?- 你不会有时间在我的链接,不仅要了解文章,甚至阅读,这是我发现的最新,这是我的代码上的 "3屏长老",写给某人,我有一个代码结构总是约(前提是不会进一步修改,改变基本逻辑,有代码...最好不要记住对最初的线性结构化代码 可以做什么(( )))。
下面将是所有的服务功能,但主要的代码--TC本身的可读性和最线性的逻辑,我总是这样写,在大学里老师只接受这样的来源作为上交的工作,否则你将不能通过))))。
有什么意义?- 我想再说一次:只有在没有其他解决方案的情况下才应该使用多线程,没有一个足够的程序员会随便去用异步操作来工作!我想说的是,多线程是一个很好的选择。- 好痛啊))))
一个例子将来自你:回答为什么一个交易终端需要它?
是的,他们在码头上,但实际上他们不在。 就我的理解而言。
我现在已经试过了。一切都在运作。
尽管它们在MQL中没有实际用途。
回答为什么交易终端需要这个问题?
...
一个例子是来自你的:回答交易终端为什么需要这个问题?
我已经回答过你了。你正在忽视。
1.我需要多线程,因为我的程序要复杂得多。我想在一个程序中结合很多重的功能。三维可视化,服务器通信,GUI,以及各种计算。单一的线程是不够的。因此,我必须把程序分成几个部分,或者使用本地多线程。如果没有,那我就把节目分成几部分。
2.终端自己是多线程的。问问它的开发者,为什么它需要多线程。为什么我需要多线程--见第1点。
Igor Makanu
你的例子:回答为什么交易终端需要这个问题?
嗯,最明显的是一个独立的接口线,对金丝雀来说尤其关键,虽然我自己没有。
ZS:我并不提倡多线程,如果有的话。
我已经回复了你。你正在忽视。
1.我需要多线程,因为我的程序要复杂得多。我想在一个程序中结合很多很重的功能。三维可视化,服务器通信,GUI,以及各种计算。单一的线程是不够的。所以,我必须把程序分成几个部分,或者使用内置的多线程。如果没有,那我就把程序分成几部分。
2) 终端本身是多线程的。为什么它需要多线程--问它的开发者。为什么我需要多线程--见第1点。
你也忽略了别人告诉你的,我已经写过了:苍蝇分开--切糕分开!GUI和交易策略不能在一个代码中执行!这是不可能的。
在你关于图形界面的方法的话题中,有人告诉你,你的代码是低效的,你认为通过把函数抛出到一个单独的线程中,你会提高性能?- 它不会提高性能,但会造成现在同步所有东西的额外麻烦,))))。
记得在4pd上关于安卓-设备的主题中,用户只通过自由内存的数量来确信固件版本的有效性,而且恰恰相反--自由内存越多,固件越酷,但不幸的是,没有理解操作系统必须有效地使用所有资源--包括内存,如果有很多自由内存,不一定操作系统有效地使用资源。 所以在你的案例中,你无法在一个线程中实现性能,所以你需要更多的线程- 也许这与语言的能力(平台、操作系统......)无关,而是与开发者有关?- 也许他的效率并不高?我检查了文章系列中的GUI和去年KB中的GUI,我没有看到任何明显的滞后,一切都在一个良好的水平上工作。我看了那些代码的源代码,界面元素的遍历方案,OOP方法本身--都与Windows中的图形原理非常相似--为什么对他们有效而对你无效?))))))- 也许最初的方法毕竟不正确,或者你的理论背景两只爪子都是瘸的?
你也忽略了别人告诉你的,我已经写过了:苍蝇分开--小刀分开!GUI和交易策略不应该在同一代码中执行!"。
在你关于图形界面的方法的话题中,有人告诉你,你的代码是低效的,你认为通过把函数抛出到一个单独的线程中,你会提高性能?- 它不会提高性能,但会造成现在同步所有东西的额外麻烦,))))。
记得在4pd上关于安卓-设备的主题中,用户只通过自由内存的数量来确信固件版本的有效性,而且恰恰相反--自由内存越多,固件越酷,但不幸的是,没有理解操作系统必须有效地使用所有资源--包括内存,如果有很多自由内存,不一定操作系统有效地使用资源。所以在你的案例中,你无法在一个线程中实现性能,所以你需要更多的线程- 也许这与语言的能力(平台、操作系统......)无关,而是与开发者有关?- 也许他的效率并不高?我检查了文章系列中的GUI和去年KB中的GUI,我没有看到任何明显的滞后,一切都在一个良好的水平上工作。我看了那些代码的源代码,界面元素的遍历方案,OOP方法本身--都与Windows中的图形原理非常相似--为什么对他们有效而对你无效?))))))- 也许最初的方法毕竟是错误的? 或者是理论上的训练两只爪子都很蹩脚?
是什么让你认为某些东西效率低下或对我不起作用?到我的资料中去看看事情是如何进行的。正是因为事情在运行和发展,我才认为对多线程的需求迫在眉睫。
好吧,最明显的是一个独立的接口线,对guini来说尤其关键,尽管我自己没有这个。
ZS:我并不提倡多线程,如果有的话。
那么,你在市场上没有产品。那么为什么要用MKL做一个GUI呢,因为用C#就可以很容易地做出来,现在C#很容易连接到MKL。而那个GUI已经在其自身的线程中运行。
下面是一个在一个线程中编写线性异步代码的例子。
假设EventLoop功能是在mql中实现的,并由ThreadPool开发者实现。
用户不需要进入线程!开发人员应该处理好这个问题,并编写相应的类。
该程序在一个单线程中运行,而常规的非阻塞式拼接则在一个线程池中执行。
现在将你在colbacks中的简单函数替换为计算量大或需要并发的函数。
巨方便,一切并行))