我的方法。核心是引擎。 - 页 166 1...159160161162163164165166167168169170171172173...184 新评论 Реter Konow 2019.01.31 19:22 #1651 Nikolai Semko: 彼得,证据在哪里?哪里有研究报告比较一个程序在一个ex5线程(用ex4实验甚至没有意义)和两个线程的执行速度?这只是一个假设性的推测,顺便说一下,这是我(在这里)第一次陈述,当时我没有从你那里收到至少一个关于你的方法的优点的表述。你已经把我的假说当作事实了。我个人承认可能会有优势,但纯粹根据直觉(不是根据知识),我打赌75%的人不会有任何优势,因为两个程序之间的互动和数据交换是不自由的,而且两个ex5的处理器是一个。但这个问题的答案只能由开发者自己或定性的实验来给出。我可以为你提供程序间数据交换成本低的证明。即使是在传递一个数千个字符的字符串时。我做了一个实验。我将找到并上传两个测试的EA。通过资源进行的通信不会加载处理器,只是重新绘制。 该引擎将积累广泛的功能,而只有一小部分--用户的GUI。也就是说,引擎将包括只被单独的应用程序部分要求的代码,其余的代码可以被其他图形上的应用程序使用。这样一来,引擎就成了不同的EA同时使用的辅助功能,因此,它应该是一个独立的程序,在自己的线程中运行。 Реter Konow 2019.01.31 19:29 #1652 在这里。把它放在第一个图形 上。 //+------------------------------------------------------------------+ //| TEST_2.mq4 | //| Peter Konow | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Peter Konow" #property link "https://www.mql5.com" #property version "1.00" #property strict //+------------------------------------------------------------------+ union Char_Uint{uchar Char[32000]; uint Uint[8000];}; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { EventSetMillisecondTimer(16); //---------------------------------------------- if(!ObjectCreate(0,"Resource",OBJ_BITMAP_LABEL,0,0,0))Print("Object is not created! ",GetLastError()); else Print("Object created!"); //------------------------------- if(!ObjectSetString(0,"Resource",OBJPROP_BMPFILE,"::Resource"))Print("BMPFILE is not created!"); else Print("BMPFILE created!"); //---------------------------------------------- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert deinitialization function | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- destroy timer EventKillTimer(); } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- } //+------------------------------------------------------------------+ //| Timer function | //+------------------------------------------------------------------+ void OnTimer() { Char_Uint u; string String = NULL; int q = MathRand(),w = 0; if(q > 10000)q = 10000; //------------------------------------------------------- //Формируем случайную строку. //------------------------------------------------------- for(int a1 = 0; a1 < q; a1++) { String += (string)a1 + "^"; w++; if(w == 10) { String += "$"; w = 0; } } //------------------------------------------------------- //Получаем размер собранной строки. //------------------------------------------------------- int StrSize = StringLen(String); //------------------------------------------------------- //Копируем строку в массив Char[]. //------------------------------------------------------- StringToCharArray(String,u.Char); //------------------------------------------------------- //Cохраняем строку переведенную в байты в ресурсе. //------------------------------------------------------- if(!ResourceCreate("::Resource",u.Uint,8000,1,0,0,0,COLOR_FORMAT_XRGB_NOALPHA))Print("Resource is not created!"); //------------------------------------------------------- } //+------------------------------------------------------------------+ Реter Konow 2019.01.31 19:30 #1653 而这个人是在第二个。 //+------------------------------------------------------------------+ //| Resource reader.mq4 | //| Peter Konow | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Peter Konow" #property link "https://www.mql5.com" #property version "1.00" #property strict //+------------------------------------------------------------------+ union Char_Uint { uchar Char[32000]; uint Uint[8000]; }; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- indicator buffers mapping EventSetMillisecondTimer(16); if(!ObjectSetString(0,"Resource",OBJPROP_BMPFILE,"\\Experts\\TEST_2.ex4::Resource"))Print("Resource is not connected!"); else Print("Resource connected!"); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Timer function | //+------------------------------------------------------------------+ void OnTimer() { //--- Char_Uint u; uint width,height; string msg[],pars[]; //----------------------------- if(!ResourceReadImage("\\Experts\\TEST_2.ex4::Resource",u.Uint,width,height))Print("Failed to read resource! ",GetLastError()); //----------------------------- string String = CharArrayToString(u.Char); //----------------------------- ushort Msep = StringGetCharacter("^",0); int s = StringSplit(String,Msep,msg); for(int a1 = 0; a1 < s; a1++) { ushort Psep = StringGetCharacter("$",0); StringSplit(msg[a1],Psep,pars); } //----------------------------- Alert(" String ",String); //----------------------------- //------------------------------------------------------------------------------------------------------- ArrayInitialize(u.Char,0); ResourceCreate("\\Indicators\\DRIVE.ex4::EA_2_DRIVE",u.Uint,8000,1,0,0,0,COLOR_FORMAT_ARGB_RAW); //------------------------------------------------------------------------------------------------------- } //+------------------------------------------------------------------+ Nikolai Semko 2019.01.31 19:30 #1654 Реter Konow:我可以提供证明,在程序之间交换数据的成本很低。即使是在传输一串数千个字符的时候。我做了一个实验。我将找到并上传两个测试的EA。通过资源进行的通信不会加载处理器,只是重新绘制。 该引擎将积累广泛的功能,而只有一小部分--用户的GUI。也就是说,引擎将包括只被单独的应用程序部分要求的代码,其余的代码可以被其他图形上的应用程序使用。这样一来,发动机就成了不同EA同时使用的辅助功能中心,因此,它必须是一个独立的程序。 但是,如果一个引擎为多个程序服务,那么它就更会拖慢整个过程,因为在其中为不同的程序服务将按顺序发生,而每个应用程序中你的引擎类的实例将并行运行。 Реter Konow 2019.01.31 19:30 #1655 第二个EA有警报。只要它是开放的,处理器就会有压力。只要你把它注释出来,负载就会消失。 Реter Konow 2019.01.31 19:35 #1656 Nikolai Semko: 但是,如果你的引擎为几个应用程序服务,那么它就会拖慢整个过程,因为它将按顺序为不同的程序服务,而每个应用程序中你的引擎类的实例将并行运行。这些程序将根据需要以异步方式访问引擎。一个要求根据传递给它的数组建立一个图形,另一个要求使用一个公式计算一个值,第三个要求是其他东西......所有这些都不会是一个单一的连续过程,而是会不时地发生。 在这种情况下,引擎将携带其中一个应用程序的图形用户界面,而用户将切换到另一个应用程序的图形用户界面。 Реter Konow 2019.01.31 19:39 #1657 如果你把引擎放在一个应用程序中,应用程序中就会有很多不必要的东西。因此,你需要根据各个EA的具体需求定制引擎。用户将无法应对这种情况。它是漫长而复杂的。它将阻止我发展发动机的多功能性。 Nikolai Semko 2019.01.31 19:47 #1658 Реter Konow: 如果你把引擎放在一个应用程序中,应用程序中就会有很多不必要的东西。因此,你需要根据各个EA的具体需求定制引擎。用户将无法应对这种情况。它是漫长而复杂的。而且会干扰发动机的普适性发展。 它只是一组没有任何意义的词语。 Реter Konow 2019.01.31 19:50 #1659 Nikolai Semko: 只是一堆没有任何意义的词语。请相信我的话。我知道我在做什么。 Nikolai Semko 2019.01.31 19:51 #1660 Реter Konow:请相信我的话。我知道我在做什么。 不,你不知道。你不知道。 1...159160161162163164165166167168169170171172173...184 新评论 原因: 取消 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 Google 登录
彼得,证据在哪里?
我可以为你提供程序间数据交换成本低的证明。即使是在传递一个数千个字符的字符串时。我做了一个实验。我将找到并上传两个测试的EA。通过资源进行的通信不会加载处理器,只是重新绘制。
该引擎将积累广泛的功能,而只有一小部分--用户的GUI。也就是说,引擎将包括只被单独的应用程序部分要求的代码,其余的代码可以被其他图形上的应用程序使用。这样一来,引擎就成了不同的EA同时使用的辅助功能,因此,它应该是一个独立的程序,在自己的线程中运行。
在这里。把它放在第一个图形 上。
而这个人是在第二个。
我可以提供证明,在程序之间交换数据的成本很低。即使是在传输一串数千个字符的时候。我做了一个实验。我将找到并上传两个测试的EA。通过资源进行的通信不会加载处理器,只是重新绘制。
该引擎将积累广泛的功能,而只有一小部分--用户的GUI。也就是说,引擎将包括只被单独的应用程序部分要求的代码,其余的代码可以被其他图形上的应用程序使用。这样一来,发动机就成了不同EA同时使用的辅助功能中心,因此,它必须是一个独立的程序。
但是,如果你的引擎为几个应用程序服务,那么它就会拖慢整个过程,因为它将按顺序为不同的程序服务,而每个应用程序中你的引擎类的实例将并行运行。
这些程序将根据需要以异步方式访问引擎。一个要求根据传递给它的数组建立一个图形,另一个要求使用一个公式计算一个值,第三个要求是其他东西......所有这些都不会是一个单一的连续过程,而是会不时地发生。
在这种情况下,引擎将携带其中一个应用程序的图形用户界面,而用户将切换到另一个应用程序的图形用户界面。
如果你把引擎放在一个应用程序中,应用程序中就会有很多不必要的东西。因此,你需要根据各个EA的具体需求定制引擎。用户将无法应对这种情况。它是漫长而复杂的。而且会干扰发动机的普适性发展。
只是一堆没有任何意义的词语。
请相信我的话。我知道我在做什么。
请相信我的话。我知道我在做什么。