Я запускаю консольную тестовую программу Visual C++ внутри ежедневной сборки. Время от времени тест вызывал некоторую функцию, которая была неправильно изменена другими разработчиками, спускалась в бесконечный цикл и висела таким образом, блокируя сборку.Watchdog встроен в тот же процесс, что и программа, которую он управляет
Мне нужно, чтобы сторожевое решение было максимально простым. Вот что я придумал. В точке ввода тестовой программы я запускаю отдельный поток, который непрерывно циклически и проверяет прошедшее время. Если какой-либо предопределенный период превышен, он вызывает TerminateProcess(). Псевдокод:
DWORD WatchDog(LPVOID)
{
DWORD start = GetTickCount();
while(true) {
Sleep(ReasonablePeriod);
if(GetTickCount() - start > MaxAllowed) {
TerminateProcess(GetCurrentProcess(), 0);
}
}
return 0;
}
Является ли это решение хуже, чем сторожевой таймер, реализованный как отдельная программа-мастер?