看门狗程序检测每个线程是否存活
int ThreadTaskDeal()
{
ThreadTaskNode **ptNode = NULL;
ptNode = &g_ptThreadTaskHead;
if(NULL == (*ptNode))
{
printf("ThreadTaskDeal g_ptThreadTaskHead is null \n");
}
//链表头结点开始遍历
while(NULL != (*ptNode))
{
(*ptNode)->tThreadTask.dwThreadCount++;
//如果发现其中一个线程未响应超时60s,则说明线程异常,重启动,并记录线程信息
if((*ptNode)->tThreadTask.dwThreadCount >= 6)
{
printf( Thread exception taskid = %d ThreadName: %s \n",(*ptNode)->tThreadTask.dwTaskId,(*ptNode)->tThreadTask.achThreadName);
Reboot();
}
ptNode = &(*ptNode)->pNext;
}
return 0;
}
每个线程都定时 修改dwThreadCount 这个变量。一旦这个变量大于某个数就认为这个线程堵死了