2009-12-23 4 views
0

Я запускаю консольную тестовую программу Visual C++ внутри ежедневной сборки. Время от времени тест вызывал некоторую функцию, которая была неправильно изменена другими разработчиками, спускалась в бесконечный цикл и висела таким образом, блокируя сборку.Watchdog встроен в тот же процесс, что и программа, которую он управляет

Мне нужно, чтобы сторожевое решение было максимально простым. Вот что я придумал. В точке ввода тестовой программы я запускаю отдельный поток, который непрерывно циклически и проверяет прошедшее время. Если какой-либо предопределенный период превышен, он вызывает TerminateProcess(). Псевдокод:

DWORD WatchDog(LPVOID) 
{ 
    DWORD start = GetTickCount(); 
    while(true) { 
     Sleep(ReasonablePeriod); 
     if(GetTickCount() - start > MaxAllowed) { 
      TerminateProcess(GetCurrentProcess(), 0); 
     } 
    } 
    return 0; 
} 

Является ли это решение хуже, чем сторожевой таймер, реализованный как отдельная программа-мастер?

ответ

1

Я думаю, что предпочтительнее реализовать сторожевой таймер как отдельный процесс. Легче повторить его использование, легче обнаружить, что ваше приложение разбилось и получить код возврата.

 Смежные вопросы

  • Нет связанных вопросов^_^