OnDeinit - обыкновенная функция в программе MQL4/5, которая вызывается в определённых ситуациях. Тут как запрограммируете, так и будет
Конкретизируйте вопрос. Что именно Вас интересует?
С объектами, которые явно удаляются (созданные в выделенной памяти) все понятно. Интересует процесс освобождения памяти и удаления объектов созданных в автоматической памяти.
Т.е. есть к примеру два объекта и переменная фундаментального типа:
class CFirst {...};
class CSecond {...};
int iVolume = 100;
CFirst first_obj;
CSecond *second_obj;
intOnInit(void) {
second_obj = new CSecond();
// текст функции OnInit
}
voidOnDeinit(constint reason) {
if(CheckPointer(second_obj == POINTER_DYNAMIC)
delete second_obj;
}
Интересует какой будет порядок освобождения памяти и удаления всех объектов, при удалении программы.
В последний раз вот при запуске терминал завис. Я заглянул в диспетчер задач, терминал байт за байтом жрет память, через пару минут сожрал все 8Гб памяти и операционная система зависла напару с терминалом. Пришлось жать кнопку "ресет" на системном блоке.
После перезагрузки компьютера запустил терминал - история с зависанием повторилась, система перестала отвечать на мои бойкие попытки её разбудить вместе с терминалом.
После перезапуска компьютера я удалил все конфигурационные файлы терминала, запустил - история с зависанием повторилась.
После перезапуска компьютера я удалил все файлы истории торговых серверов и только после этого терминал соизволил работать нормально, и то после некоторого раздумья минуты 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 строк кода в которых потом затруднен поиск.
Единственное что на текущий момент вижу это отправлять массив структуры по ссылке
С объектами, которые явно удаляются (созданные в выделенной памяти) все понятно. Интересует процесс освобождения памяти и удаления объектов созданных в автоматической памяти.
Т.е. есть к примеру два объекта и переменная фундаментального типа:
Интересует какой будет порядок освобождения памяти и удаления всех объектов, при удалении программы.
Как разбить код на части и включаемые файлы правильно, первый раз с таким сталкиваюсь по этому задаю вопрос к опытным спецам
Вот пример
ТО есть класс наследуется от другого класса и содержит структуру, в примере структуру я сократил, далее идут методы по работе с массивом структуры
этих методов штук 40-50 может больше пока не знаю.
Хочу каждый метод Вынести во включаемый файл или иначе как то организовать структуру кода что бы в самом советнике не городить 10 000 -20 000 строк кода в которых потом затруднен поиск.
Единственное что на текущий момент вижу это отправлять массив структуры по ссылке
типа
Мне кажется это не самый удачный выбор.
Что можно сделать ?
Если классы емкие, то лучше под каждый класс создать отдельный листинг, а в коде где используются объекты этого класса, подключить листинг класса через #include. То же самое и структур касается и библиотек функций. Если классы и структуры не емкие, то их можно в один листинг включить. Так же можно создать листинг общих дефайнов и макросов.
И не бойтесь, что у вас будет целое семейство листингов, имеющих отношение к одной программе, это обычное явление, у меня в торговых системах используется 15-20 листингов, плюс каталоги с .bmp и .gif для интерфейса. Все листинги распределяю по отдельным каталогам. Так проще ориентироваться при отлове ошибок и модернизации.
В последний раз вот при запуске терминал завис. Я заглянул в диспетчер задач, терминал байт за байтом жрет память, через пару минут сожрал все 8Гб памяти и операционная система зависла напару с терминалом. Пришлось жать кнопку "ресет" на системном блоке.
После перезагрузки компьютера запустил терминал - история с зависанием повторилась, система перестала отвечать на мои бойкие попытки её разбудить вместе с терминалом.
После перезапуска компьютера я удалил все конфигурационные файлы терминала, запустил - история с зависанием повторилась.
После перезапуска компьютера я удалил все файлы истории торговых серверов и только после этого терминал соизволил работать нормально, и то после некоторого раздумья минуты 3.
Терминал виснит из билда в билд. Win10x64.
Нет никаких штатных ситуаций, в которых терминалу положено виснуть.
Не должен терминал виснуть.
Все подключения к серверу, переключения между счетами производится в отдельных потоках. Зависание означает, что что-то тормозит интерфейсный поток
Подгрузка истории, кстати, тоже производится в отдельном потоке
Нет никаких штатных ситуаций, в которых терминалу положено виснуть.
Не должен терминал виснуть.
Все подключения к серверу, переключения между счетами производится в отдельных потоках. Зависание означает, что что-то тормозит интерфейсный поток
Подгрузка истории, кстати, тоже производится в отдельном потоке
Vladimir Pastushak: Это не терминалу нужно давать а винде 10, Ваши проблемы не из-за терминала а из-за винды...
Уважаемый Slawa, подтверждаете что терминал может зависать из за винды? Что может заставить терминал зависнуть и что его может надоумить сожрать всю оперативную память.... Хочу купить оперативы 16Гб, но ведь не факт что хватит, при таком то непотребном поведении терминала.
OnDeinit - обыкновенная функция в программе MQL4/5, которая вызывается в определённых ситуациях. Тут как запрограммируете, так и будет
Конкретизируйте вопрос. Что именно Вас интересует?
С объектами, которые явно удаляются (созданные в выделенной памяти) все понятно. Интересует процесс освобождения памяти и удаления объектов созданных в автоматической памяти.
Т.е. есть к примеру два объекта и переменная фундаментального типа:
Интересует какой будет порядок освобождения памяти и удаления всех объектов, при удалении программы.
...
В каких случаях терминал может зависнуть? - по видимому существуют штатные ситуации, в которых терминалу положено виснуть.
По моим наблюдениям виснет (подвисает на неопределённое время) всегда при:
1. Подключении к серверу.
2. П1. при переключении между счетами.
3. Во время запуска терминала.
В последний раз вот при запуске терминал завис. Я заглянул в диспетчер задач, терминал байт за байтом жрет память, через пару минут сожрал все 8Гб памяти и операционная система зависла напару с терминалом. Пришлось жать кнопку "ресет" на системном блоке.
После перезагрузки компьютера запустил терминал - история с зависанием повторилась, система перестала отвечать на мои бойкие попытки её разбудить вместе с терминалом.
После перезапуска компьютера я удалил все конфигурационные файлы терминала, запустил - история с зависанием повторилась.
После перезапуска компьютера я удалил все файлы истории торговых серверов и только после этого терминал соизволил работать нормально, и то после некоторого раздумья минуты 3.
Терминал виснит из билда в билд. Win10x64.
В каких случаях терминал может зависнуть? - по видимому существуют штатные ситуации, в которых терминалу положено виснуть.
По моим наблюдениям виснет (подвисает на неопределённое время) всегда при:
1. Подключении к серверу.
2. П1. при переключении между счетами.
3. Во время запуска терминала.
В последний раз вот при запуске терминал завис. Я заглянул в диспетчер задач, терминал байт за байтом жрет память, через пару минут сожрал все 8Гб памяти и операционная система зависла напару с терминалом. Пришлось жать кнопку "ресет" на системном блоке.
После перезагрузки компьютера запустил терминал - история с зависанием повторилась, система перестала отвечать на мои бойкие попытки её разбудить вместе с терминалом.
После перезапуска компьютера я удалил все конфигурационные файлы терминала, запустил - история с зависанием повторилась.
После перезапуска компьютера я удалил все файлы истории торговых серверов и только после этого терминал соизволил работать нормально, и то после некоторого раздумья минуты 3.
Терминал виснит из билда в билд. Win10x64.
Как разбить код на части и включаемые файлы правильно, первый раз с таким сталкиваюсь по этому задаю вопрос к опытным спецам
Вот пример
ТО есть класс наследуется от другого класса и содержит структуру, в примере структуру я сократил, далее идут методы по работе с массивом структуры
этих методов штук 40-50 может больше пока не знаю.
Хочу каждый метод Вынести во включаемый файл или иначе как то организовать структуру кода что бы в самом советнике не городить 10 000 -20 000 строк кода в которых потом затруднен поиск.
Единственное что на текущий момент вижу это отправлять массив структуры по ссылке
типа
Мне кажется это не самый удачный выбор.
Что можно сделать ?
С объектами, которые явно удаляются (созданные в выделенной памяти) все понятно. Интересует процесс освобождения памяти и удаления объектов созданных в автоматической памяти.
Т.е. есть к примеру два объекта и переменная фундаментального типа:
Интересует какой будет порядок освобождения памяти и удаления всех объектов, при удалении программы.
OnDeinit к этому никакого отношения не имеет.
Вы читали документацию?
Такая же винда, терминал запускается только от админа, и все файлы типа метаедитор так же от админа, проблем нет.
Как разбить код на части и включаемые файлы правильно, первый раз с таким сталкиваюсь по этому задаю вопрос к опытным спецам
Вот пример
ТО есть класс наследуется от другого класса и содержит структуру, в примере структуру я сократил, далее идут методы по работе с массивом структуры
этих методов штук 40-50 может больше пока не знаю.
Хочу каждый метод Вынести во включаемый файл или иначе как то организовать структуру кода что бы в самом советнике не городить 10 000 -20 000 строк кода в которых потом затруднен поиск.
Единственное что на текущий момент вижу это отправлять массив структуры по ссылке
типа
Мне кажется это не самый удачный выбор.
Что можно сделать ?
Если классы емкие, то лучше под каждый класс создать отдельный листинг, а в коде где используются объекты этого класса, подключить листинг класса через #include. То же самое и структур касается и библиотек функций. Если классы и структуры не емкие, то их можно в один листинг включить. Так же можно создать листинг общих дефайнов и макросов.
И не бойтесь, что у вас будет целое семейство листингов, имеющих отношение к одной программе, это обычное явление, у меня в торговых системах используется 15-20 листингов, плюс каталоги с .bmp и .gif для интерфейса. Все листинги распределяю по отдельным каталогам. Так проще ориентироваться при отлове ошибок и модернизации.
В каких случаях терминал может зависнуть? - по видимому существуют штатные ситуации, в которых терминалу положено виснуть.
По моим наблюдениям виснет (подвисает на неопределённое время) всегда при:
1. Подключении к серверу.
2. П1. при переключении между счетами.
3. Во время запуска терминала.
В последний раз вот при запуске терминал завис. Я заглянул в диспетчер задач, терминал байт за байтом жрет память, через пару минут сожрал все 8Гб памяти и операционная система зависла напару с терминалом. Пришлось жать кнопку "ресет" на системном блоке.
После перезагрузки компьютера запустил терминал - история с зависанием повторилась, система перестала отвечать на мои бойкие попытки её разбудить вместе с терминалом.
После перезапуска компьютера я удалил все конфигурационные файлы терминала, запустил - история с зависанием повторилась.
После перезапуска компьютера я удалил все файлы истории торговых серверов и только после этого терминал соизволил работать нормально, и то после некоторого раздумья минуты 3.
Терминал виснит из билда в билд. Win10x64.
Нет никаких штатных ситуаций, в которых терминалу положено виснуть.
Не должен терминал виснуть.
Все подключения к серверу, переключения между счетами производится в отдельных потоках. Зависание означает, что что-то тормозит интерфейсный поток
Подгрузка истории, кстати, тоже производится в отдельном потоке
от админа? а может терминалу ещё дать шапку с крестом, золотое яблоко, посох и величать его не иначе как Предобрейший Царь Всея Русси?
Нет никаких штатных ситуаций, в которых терминалу положено виснуть.
Не должен терминал виснуть.
Все подключения к серверу, переключения между счетами производится в отдельных потоках. Зависание означает, что что-то тормозит интерфейсный поток
Подгрузка истории, кстати, тоже производится в отдельном потоке
Это не терминалу нужно давать а винде 10, Ваши проблемы не из-за терминала а из-за винды...