线程看门狗

来源:互联网 发布:网络播放量vlinkage 编辑:程序博客网 时间:2024/06/04 18:14

本模块维护开启的工作线程。如果判断该线程不能正常工作,则工作进程自杀重启。


1、使用VS2008创建一个带预编译头的控制台项目。


2、源文件中的内容:

#include "stdafx.h"  #include <windows.h>  #include<iostream>  using namespace std;  struct SThreadPara{bool m_bAlive;HANDLE m_hThread;};DWORD WINAPI FWorkThread(void *pVoid){printf("线程开始\n");SThreadPara *pPara = (SThreadPara *)pVoid;while(1){pPara->m_bAlive = true;Sleep(/*1*/6);}return TRUE;}int main( void )  {  char ch;  SThreadPara aPara;aPara.m_bAlive = false;aPara.m_hThread = NULL;aPara.m_hThread = CreateThread(NULL,0,FWorkThread,&aPara,0,NULL); if(NULL == aPara.m_hThread){printf("创建线程失败\n");return 1;}printf("创建线程成功\n");while(1){Sleep(3);if(!aPara.m_bAlive){//直接进程自杀好了。printf("线程有问题,进程自杀\n");cin>>ch;ExitProcess(0); return 1;/*if(!TerminateThread(aPara.m_hThread,0)){printf("终结线程失败\n");return 1;}CloseHandle(aPara.m_hThread);aPara.m_hThread = NULL;printf("终结线程成功\n");cin>>ch;aPara.m_bAlive = false;aPara.m_hThread = NULL;aPara.m_hThread = CreateThread(NULL,0,FWorkThread,&aPara,0,NULL);if(NULL == aPara.m_hThread){printf("创建线程失败\n");return 1;}printf("创建线程成功\n");*/}else{aPara.m_bAlive = false;}}  cin>>ch;return 0;  }  




0 0
原创粉丝点击