本模块维护开启的工作线程。如果判断该线程不能正常工作,则工作进程自杀重启。
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;
}