MetaTrader 4 Client Terminal build 610 - страница 52

 
AlexeyVik:

Не совсем корректно я выразился, или точней не подозревал о таком подвохе. Если открывать новый график, то всё нормально работает. НО.

Если запустить отладку, то открывается график инструмента, первого в списке "Обзор рынка" и ТФ Н1, а мне надо М15. Как этого добиться???



В MetaEditor Сервис-Настройки-Отладка и выберите ТФ
 
alexey_pak:

В MetaEditor Сервис-Настройки-Отладка и выберите ТФ
Спасибо тёзка. :)))
 
Renat:

Выпустили для тестов новый 613 билд на сервере MetaQuotes-New MT4 Test (адрес demo.metaquotes.net:444)

ошибка все же осталась https://www.mql5.com/ru/forum/149655/page49#916182
 
Что такое "metaviewer.dll" и зачем в 32-разрядном МТ4 библиотека "metaviewer64.dll"?
 
Renat:
А какие проблемы есть с деструкторами?

с классами совсем не работал, может что не так написал ?!

деструктор не вызывается и файл не удаляется

#property strict
#property indicator_chart_window

class Test
  {
protected:
   string            name;
   void              setName(void);
   string            getName(void);

public:
   void              Test(void);
   void             ~Test(void);
   void              process(void);

  };
//+------------------------------------------------------------------+
void Test::Test()
  {
   setName();
  }
//+------------------------------------------------------------------+
void Test::setName()
  {
   name="test.csv";
  }
//+------------------------------------------------------------------+
string Test::getName()
  {
   return(name);
  }
//+------------------------------------------------------------------+
void Test::~Test(void)
  {
   bool d = FileDelete(getName());
   Print("~Test: ",d);
  }
//+------------------------------------------------------------------+
void Test::process()
  {
   int h=INVALID_HANDLE;

   h=FileOpen(getName(),FILE_READ|FILE_WRITE|FILE_CSV,";");

   if(h==INVALID_HANDLE)
     {
      return;
     }
   FileSeek(h,0,SEEK_END);
   string s=TimeToStr(TimeCurrent(),TIME_DATE|TIME_SECONDS);
   FileWrite(h,s);
   FileFlush(h);
   FileClose(h);
  }
//+------------------------------------------------------------------+


Test *t;
//+------------------------------------------------------------------+
int OnInit()
  {
   t = new Test();
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {

   
   if (t == NULL){
      return(0);
   }
   t.process();
   return(rates_total);
  }
//+------------------------------------------------------------------+

где я накосячил ?

 
keekkenen:

с классами совсем не работал, может что не так написал ?!

деструктор не вызывается и файл не удаляется

где я накосячил ?

Подозреваю, все из-за того, что вы сделали t =new Test();, но не сделали delete t;
 

В каком порядке осуществляется обработка различных событий во время выполнения эксперта?

Более конкретно, если OnTick() и OnTimer() вызывают одну и ту же функцию Func1(), должен ли я позаботиться самостоятельно о создании критической секции?

 
alsu:
Подозреваю, все из-за того, что вы сделали t =new Test();, но не сделали delete t;


имеется в виду на деините ?

если да, то не работает все одно..

 
keekkenen:


имеется в виду на деините ?

если да, то не работает все одно..


а нет вру, не привык еще к новым названиям обработчиков событий.. вопрос снимается, накосячено мной
 
keekkenen:


имеется в виду на деините ?

если да, то не работает все одно..


Неважно где. Если пользуетесь new, то, согласно правилам языка, обязаны использовать delete в тот момент, когда объект уже не нужен.

Еще может быть проблема с объявлением, кажется, деструктор объявляют обычно без типа возвращаемого значения, то есть без void

public ~Test();