mt5-manager/docs/articles/part-04/publish/code/10_cpp.txt
Yuriy Bykov Yuriy Bykov 3ab7e53a4f Исправить оформление кода и архив четвёртой статьи
- оформить комментарии и заголовки функций по замечаниям модератора
- обновить листинги и версию сервиса до 1.01
- подготовить MQL5.zip без EX5 и личных реквизитов
- сохранить исправленную редакцию статьи и правила оформления
2026-10-29 22:07:36 +03:00
55 lines
1.8 KiB
Text
//+------------------------------------------------------------------+
//| OnStart: точка входа сервиса |
//+------------------------------------------------------------------+
void OnStart()
{
PrintFormat("Запуск сервиса для экземпляра '%s'", InstanceFolder());
//--- Разброс интервала, чтобы записи разных сервисов не совпадали по фазе
MathSrand((int)TimeLocal() + (int)GetTickCount());
const int interval_ms = InpIntervalSec * 1000;
while(!IsStopped())
{
//--- 1. Подключаемся к базе, если ещё не подключены
if(g_db == INVALID_HANDLE)
{
if(!OpenDatabase())
{
Sleep(interval_ms);
continue;
}
g_terminal_id = -1;
}
//--- 2. Регистрируем терминал, если ещё не зарегистрирован
if(g_terminal_id < 0)
{
g_terminal_id = RegisterTerminal();
if(g_terminal_id < 0)
{
Sleep(interval_ms);
continue;
}
}
//--- 3. Записываем текущее состояние
if(!StoreState())
{
g_skipped++;
if(g_skipped % 10 == 0)
PrintFormat("Пропущено записей: %d, последняя ошибка: %d",
g_skipped, GetLastError());
}
//--- 4. Ждём до следующей итерации, добавляя небольшой случайный разброс
int pause = interval_ms;
if(InpJitterMs > 0)
pause += (int)(MathRand() % InpJitterMs);
Sleep(pause);
}
if(g_db != INVALID_HANDLE)
DatabaseClose(g_db);
}