Abnormal Termination

 

Придумал такое управление работой своей программы по отклику кнопок которые нажаты в терминале

(т.е. мне НЕ надо чтоб прога сделала "здесь и сейчас", а когда ей "будет удобно"):

Сделал окно: (Убрал оттуда все объекты, цвета, оставил желтый текст на черном фоне - нет графику, только текущая инфа) и вывел туда Comment, который показывает то, что происходит.

Две кнопки вверху (CHART_AUTOSCROLL и CHART_SHIFT) гепотетически назвал PLAY и MENU

При нажатии MENU есть выбор (в этом же желто-черном окне)

M1 - Закрыть все позиции

M5 - Поставить стоплоссы

и т.п.

ПРОБЛЕМА заключается в том, что когда я опросил все символы и иду на второй(*1)  цикл:

1. в отладке

2. я вошел в void zMenu()

3. В момент когда я Изменяю период (жму другой таймфрейм) - получается "Abnormal Termination" (на любой строке отладки... ходить отладкой до изменения периода могу по всем строкам)

Вопрос:

1. Как отслеживать ошибки Abnormal Termination, или перехватывать их. Например на FoxPro есть перехват ошибок.

2. Я не хочу объектами, зачем лишний раз проц. нагружать. Comment сойдет.

(*1) внутри первого цикла код работает замечательно. По окончании цикла происходит только }}}

3. void OnChartEvent - это решение нажатия не той кнопки, но я же принципиально отказался от событий на этом окне.


//*************************************************************************************************************************************************************
void zMenu()
{
ChartSetInteger(zChartFirst, CHART_AUTOSCROLL, false);       // Отжали PLAY
ChartSetInteger(zChartFirst, CHART_SHIFT, true);             // Нажали MENU
ChartSetInteger(zChartFirst, CHART_BRING_TO_TOP, true);      // Показ графика поверх всех других
 
ChartSetSymbolPeriod (zChartFirst,"EURUSD",PERIOD_D1); 
ENUM_TIMEFRAMES tfMenu = ChartPeriod(zChartFirst);

 while (tfMenu==PERIOD_D1)
{
tfMenu = ChartPeriod(zChartFirst);

//Sleep (1000);
//Alert (int(tfMenu));

Comment ("Счет: "+DoubleToString (AccountInfoInteger(ACCOUNT_LOGIN),0)+" ("+AccountInfoString(ACCOUNT_NAME)+")\n"+TerminalInfoString(TERMINAL_DATA_PATH)+
"\n\n === MENU === \n\n M1   - Закрыть все позиции \n M5   - Имитировать Старт с нуля для расчета KPI \n M15   - Посмотреть ожидаемые символы\n M30 - Показать и вывести массив исключений","\n MN   - Выход ");


if (tfMenu == PERIOD_M15) 
{
//string sExpectSymbols="";

}


}

ChartSetSymbolPeriod (zChartFirst,"EURUSD",PERIOD_D1); 
ChartSetInteger(zChartFirst, CHART_AUTOSCROLL, true);        // Нажали PLAY
ChartSetInteger(zChartFirst, CHART_SHIFT, false);            // Отжали MENU
 
return;
}
Причина обращения: