我在每日构建中运行一个 Visual C++ 控制台测试程序。测试时不时会调用一些被其他开发人员不当更改的函数,陷入无限循环并挂起,从而阻塞构建。
我需要一个尽可能简单的看门狗解决方案。这就是我想出的。在测试程序入口点,我启动了一个单独的线程,该线程连续循环并检查经过的时间。如果超过了某个预定义的时间,它会调用 TerminateProcess()。伪代码:
DWORD WatchDog( LPVOID)
{
DWORD start = GetTickCount();
while( true ) {
Sleep( ReasonablePeriod );
if( GetTickCount() - start > MaxAllowed ) {
TerminateProcess( GetCurrentProcess(), 0 );
}
}
return 0;
}
这个解决方案是否比作为单独的主程序实现的看门狗更糟糕?