DWORD WINAPI WatchDog::Thread_WatchDog_HeartBeat(LPVOID pParam)//zhouzx { WatchDog * pThis = (WatchDog *)pParam; DOG_STATUS struDogStatus; for(;;) { //给看门狗发送正常的心跳接口 SendHeartbeat(DOG_NORMAL); //狗进程不存在时重启狗进程 struDogStatus = GetWatchdogStatus(); if (DOG_NOTACTIVE == struDogStatus) { //TRACE("==YQ== 狗进程重启!!!"); OpenWatchDog(6); } //控制发送心跳的时间间隔 if(WaitForSingleObject(pThis->m_hCloseWatchDogEvent,6000) == WAIT_OBJECT_0) { break; } } return 0; }
void WatchDog::RunWatchDog(bool bNotice) { if (false == m_bOpenWatchDog) {//关闭看门狗 ClosedWatchDog(); return; } //看门狗已启动 if (m_hWatchDog) { return; } //启动看门狗 //第一个接口函数,传递心跳间隔 if(OpenWatchDog(6)) { //传递服务器所在pc的登陆用户名和密码,为自动重启所用 //if (!WriteAdminInfoToFileEX(m_chSysName, m_chSysPassWord)) //{ // AfxMessageBox(_T("用户信息保存失败!"), MB_OK | MB_ICONINFORMATION); //} //创建发送心跳的线程和控制线程退出的事件 DWORD dwRet; m_hCloseWatchDogEvent = CreateEvent(NULL, FALSE, FALSE, NULL); m_hWatchDog = CreateThread(NULL,0, LPTHREAD_START_ROUTINE (Thread_WatchDog_HeartBeat), (void*)this,0,&dwRet); LOG(LEVEL_INFO, "开启看门狗程序"); if (m_hWatchDog && bNotice) { AfxMessageBox(_T("启动看门狗成功!"), MB_ICONINFORMATION); } } else { AfxMessageBox(_T("启动看门狗失败!"),MB_ICONSTOP); } }
int CWatchDog_BF518::run() { OpenRunLight(); return OpenWatchDog(); }