Watchdog встроен в тот же процесс, что и программа, которой он управляет - PullRequest
0 голосов
/ 23 декабря 2009

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

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

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

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

1 Ответ

1 голос
/ 02 января 2010

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

...