Сторожевой таймер встроен в тот же процесс, что и программа, которой он управляет.

StackOverflow https://stackoverflow.com/questions/1951854

Вопрос

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

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

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

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

Это было полезно?

Решение

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top