Ошибки, баги, вопросы - страница 1509

 
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. П1. при переключении между счетами.

3. Во время запуска терминала.

В последний раз вот при запуске терминал завис. Я заглянул в диспетчер задач, терминал байт за байтом жрет память, через пару минут сожрал все 8Гб памяти и операционная система зависла напару с терминалом. Пришлось жать кнопку "ресет" на системном блоке.

После перезагрузки компьютера запустил терминал - история с зависанием повторилась, система перестала отвечать на мои бойкие попытки её разбудить вместе с терминалом.

После перезапуска компьютера я удалил все конфигурационные файлы терминала, запустил - история с зависанием повторилась.

После  перезапуска компьютера я удалил все файлы истории торговых серверов и только после этого терминал соизволил работать нормально, и то после некоторого раздумья минуты 3.

 

Терминал виснит из билда в билд. Win10x64. 

 
Joo Zepper:

В каких случаях терминал может зависнуть? - по видимому существуют штатные ситуации, в которых терминалу положено виснуть.

По моим наблюдениям виснет (подвисает на неопределённое время) всегда при:

1. Подключении к серверу.

2. П1. при переключении между счетами.

3. Во время запуска терминала.

В последний раз вот при запуске терминал завис. Я заглянул в диспетчер задач, терминал байт за байтом жрет память, через пару минут сожрал все 8Гб памяти и операционная система зависла напару с терминалом. Пришлось жать кнопку "ресет" на системном блоке.

После перезагрузки компьютера запустил терминал - история с зависанием повторилась, система перестала отвечать на мои бойкие попытки её разбудить вместе с терминалом.

После перезапуска компьютера я удалил все конфигурационные файлы терминала, запустил - история с зависанием повторилась.

После  перезапуска компьютера я удалил все файлы истории торговых серверов и только после этого терминал соизволил работать нормально, и то после некоторого раздумья минуты 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 может больше пока не знаю.

Хочу каждый метод Вынести во включаемый файл или иначе как то организовать структуру кода что бы в самом советнике не городить 10 000 -20 000 строк кода в которых потом затруднен поиск.

Единственное что на текущий момент вижу это отправлять массив структуры по ссылке

типа

func(STRUCT_SYMBOL & str)

Мне кажется это не самый удачный выбор.

Что можно сделать ?

 
coderex:

С объектами, которые явно удаляются (созданные в выделенной памяти) все понятно. Интересует процесс освобождения памяти и удаления объектов созданных в автоматической памяти.

Т.е. есть к примеру два объекта и переменная фундаментального типа:  

Интересует какой будет порядок освобождения памяти и удаления всех объектов, при удалении программы.

OnDeinit к этому никакого отношения не имеет.

Вы читали документацию?

 
Vladimir Pastushak:
Такая же винда, терминал запускается только от админа, и все файлы типа метаедитор так же от админа, проблем нет.
от админа? а может терминалу ещё дать шапку с крестом, золотое яблоко, посох и величать его не иначе как Предобрейший Царь Всея Русси?
 
Vladimir Pastushak:

Как разбить код на части и включаемые файлы правильно, первый раз с таким сталкиваюсь по этому задаю вопрос к опытным спецам

Вот пример

ТО есть класс наследуется от другого класса  и содержит структуру, в примере структуру я сократил, далее идут методы по работе с массивом структуры

этих методов штук 40-50 может больше пока не знаю.

Хочу каждый метод Вынести во включаемый файл или иначе как то организовать структуру кода что бы в самом советнике не городить 10 000 -20 000 строк кода в которых потом затруднен поиск.

Единственное что на текущий момент вижу это отправлять массив структуры по ссылке

типа

Мне кажется это не самый удачный выбор.

Что можно сделать ?

Если классы емкие, то лучше под каждый класс создать отдельный листинг, а в коде где используются объекты этого класса, подключить листинг класса через #include. То же самое и структур касается и библиотек функций. Если классы и структуры не емкие, то их можно в один листинг включить. Так же можно создать листинг общих дефайнов и макросов.

И не бойтесь, что у вас будет целое семейство листингов, имеющих отношение к одной программе, это обычное явление, у меня в торговых системах используется 15-20 листингов, плюс каталоги с .bmp и .gif для интерфейса. Все листинги распределяю по отдельным каталогам. Так проще ориентироваться при отлове ошибок и модернизации.

 
Joo Zepper:

В каких случаях терминал может зависнуть? - по видимому существуют штатные ситуации, в которых терминалу положено виснуть.

По моим наблюдениям виснет (подвисает на неопределённое время) всегда при:

1. Подключении к серверу.

2. П1. при переключении между счетами.

3. Во время запуска терминала.

В последний раз вот при запуске терминал завис. Я заглянул в диспетчер задач, терминал байт за байтом жрет память, через пару минут сожрал все 8Гб памяти и операционная система зависла напару с терминалом. Пришлось жать кнопку "ресет" на системном блоке.

После перезагрузки компьютера запустил терминал - история с зависанием повторилась, система перестала отвечать на мои бойкие попытки её разбудить вместе с терминалом.

После перезапуска компьютера я удалил все конфигурационные файлы терминала, запустил - история с зависанием повторилась.

После  перезапуска компьютера я удалил все файлы истории торговых серверов и только после этого терминал соизволил работать нормально, и то после некоторого раздумья минуты 3.

 

Терминал виснит из билда в билд. Win10x64. 

Нет никаких штатных ситуаций, в которых терминалу положено виснуть.

Не должен терминал виснуть.

Все подключения к серверу, переключения между счетами производится в отдельных потоках. Зависание означает, что что-то тормозит интерфейсный поток

Подгрузка истории, кстати, тоже производится в отдельном потоке

 
Joo Zepper:
от админа? а может терминалу ещё дать шапку с крестом, золотое яблоко, посох и величать его не иначе как Предобрейший Царь Всея Русси?
Это не терминалу нужно давать а винде 10, Ваши проблемы не из-за терминала а из-за винды...
 
Slawa:

Нет никаких штатных ситуаций, в которых терминалу положено виснуть.

Не должен терминал виснуть.

Все подключения к серверу, переключения между счетами производится в отдельных потоках. Зависание означает, что что-то тормозит интерфейсный поток

Подгрузка истории, кстати, тоже производится в отдельном потоке

Vladimir Pastushak:
Это не терминалу нужно давать а винде 10, Ваши проблемы не из-за терминала а из-за винды...
Уважаемый Slawa, подтверждаете что терминал может зависать из за винды? Что может заставить терминал зависнуть и что его может надоумить сожрать всю оперативную память.... Хочу купить оперативы 16Гб, но ведь не факт что хватит, при таком то непотребном поведении терминала.