错误、漏洞、问题 - 页 1509

 
Дмитрий Касаткин:
我无法访问该平台,网站说该MetaTrader服务器不支持网络终端。请联系你的经纪人更新服务器,平台说没有连接?
你的经纪人不支持网络终端。如果终端安装在你的计算机上,但没有连接,你应该打开443 端口,如果它之前是关闭的
 
亲爱的开发者,OnDeinit函数 的顺序是什么--删除对象和其他变量、清除内存等的顺序。
 
coderex:
尊敬的开发者,OnDeinit函数 操作的顺序是什么--删除对象和其他变量、清除内存等的顺序?

OnDeinit是MQL4/5的一个普通函数,在某些情况下会被调用。你是这样编程的,所以会是这样的。

请在你的问题中更加具体。你到底对什么感兴趣?

 
Slawa:

OnDeinit是MQL4/5的一个普通函数,在某些情况下会被调用。你是这样编程的,所以会是这样的。

请在你的问题中更加具体。你到底对什么感兴趣?

对于被明确删除的对象(在分配的内存中创建),一切都很清楚。我感兴趣的是释放内存 和删除在无人看管的内存中创建的对象的过程。

即,例如,有两个对象和一个基本类型的变量。

class CFirst {...};
class CSecond {...};

int iVolume = 100;
CFirst first_obj;
CSecond *second_obj;

int OnInit(void) {
   second_obj = new CSecond();
// текст функции OnInit
}
void OnDeinit(const int reason) {
   if(CheckPointer(second_obj == POINTER_DYNAMIC)
      delete second_obj;
}

我感兴趣的是,当程序被删除时,释放内存和删除所有对象的顺序将是什么。

 
Slawa:

...

终端何时可以冻结?- 似乎有一些正常的情况,终端应该是挂起的。

据我所见,它总是在以下情况下挂起(挂起的时间不确定)。

1.连接到一个服务器。

2.P1. 在账户之间切换时。

3.在启动终端 时。

上次我这样做的时候,终端在启动时冻结了。我看了看任务管理器,终端一个一个地吃内存,几分钟后,它吃完了所有的8Gb内存,操作系统和终端一起挂掉了。我不得不按下系统单元上的 "重置 "按钮。

重启计算机后,我启动了终端,挂起的历史又重演了,系统对我疯狂地试图用终端唤醒它的努力不再有反应。

重启计算机后,我删除了终端的所有配置文件,启动它--历史上又出现了挂起。

重新启动电脑后,我删除了所有的贸易服务器历史文件,之后移动电脑才开始正常工作,而且是在思考了大约3分钟后才开始工作。

终端机从构建到构建都会挂起。Win10x64。

 
Joo Zepper:

终端何时可以挂断?- 似乎有一些正常的情况下,终端应该是挂起的。

根据我的观察,终端在以下情况下总是挂起(挂起的时间不确定)。

1.连接到一个服务器。

2.P1. 在账户之间切换时。

3.在启动终端 时。

上次我这样做的时候,终端在启动时冻结了。我看了看任务管理器,终端一个一个地吃内存,几分钟后,它吃完了所有的8Gb内存,操作系统和终端一起挂掉了。我不得不按下系统单元上的 "重置 "按钮。

重启计算机后,我启动了终端,挂起的历史又重演了,系统对我疯狂地试图用终端唤醒它的努力不再有反应。

重启计算机后,我删除了终端的所有配置文件,启动它--历史上又出现了挂起。

重新启动电脑后,我删除了所有的贸易服务器历史文件,之后移动电脑才开始正常工作,而且是在思考了大约3分钟后才开始工作。

终端机从构建到构建都会挂起。Win10x64。

同样的风,终端只从管理员处运行,所有元编辑文件也从管理员处运行,没有问题。
 

这是我第一次遇到这样的代码,所以我想请教有经验的专家,如何正确地将代码分成几个部分并包含文件

下面是一个例子

class WL : public C_Object
  {
private:
   MqlTick           tick;
   struct STRUCT_SYMBOL // Структура символа
     {    
      bool              TRADING_IS_ALLOWED;      // Обновлять
      double            INDIKATOR_VOLUME;        // Обновлять
     };
   struct STRUCT_WATCH_LIST // Структура сохраненных листов
     {
      string            NAME_LIST;
     };
   STRUCT_WATCH_LIST WatchList[];
   STRUCT_SYMBOL     SymbolMass[];
}

也就是说,一个类继承自另一个类,并有一个结构;例子中的结构,我把它缩写了,然后有处理该结构的数组的方法

我有40-50个或可能更多这样的方法。

我想把每个方法移到include文件中,或以其他方式安排代码结构,这样我就不会在Expert Advisor本身中创建10 000-20 000行代码,以后就很难搜索到了。

目前我唯一能看到的是通过引用发送一个结构的数组

喜欢

func(STRUCT_SYMBOL & str)

在我看来,这并不是一个好的选择。

我们能做什么?

 
coderex:

我理解删除明确删除的对象(在分配的内存中创建)的过程。我对释放内存 和删除自动内存中创建的对象的过程感兴趣。

例如,有两个对象和一个基本类型的变量。

我想知道在删除程序时,内存去分配和删除所有对象的顺序是什么。

OnDeinit与此没有关系。

你读过文件吗?

 
Vladimir Pastushak:
终端只从管理员那里运行,所有元编辑文件也是从管理员那里来的,没有问题。
或者,也许终端应该被赋予一顶带有十字架的帽子,一个金苹果和一根杖,并被称为全俄罗斯最神圣的国王?
 
Vladimir Pastushak:

这是我第一次遇到这样的代码,所以我想请教有经验的专家,如何正确地将代码分成几个部分并包含文件

下面是一个例子

即一个类继承自另一个类,并有一个结构;例子中的结构,我把它缩写了,然后有处理该结构的一个数组的方法

我有40-50个或可能更多这样的方法。

我想把每个方法移到include文件中,或以其他方式安排代码结构,这样我就不会在Expert Advisor本身中创建10 000-20 000行代码,以后就很难搜索到了。

目前我唯一能看到的是通过引用发送一个结构数组

喜欢

我不认为这是最好的选择。

我可以做什么?

如果类的容量很大,最好为每个类建立一个单独的列表,在使用这个类的对象的代码中,通过#include包括该类的列表。这同样适用于结构和函数库。如果班级和结构的容量不大,你可以把它们纳入一个列表。你还可以创建一个常用定义和宏的清单。

不要害怕你会有一整个家族的列表与一个程序有关,这很常见,我在我的交易系统中使用了15-20个列表,加上界面的.bmp和.gif的目录。我在不同的目录中分发所有的列表。在抓取错误和升级时更容易浏览。