本文共 1225 字,大约阅读时间需要 4 分钟。
本模块维护开启的工作线程。如果判断该线程不能正常工作,则工作进程自杀重启。
1、使用VS2008创建一个带预编译头的控制台项目。
2、源文件中的内容:
#include "stdafx.h" #include#include 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; }
转载地址:http://lcwci.baihongyu.com/