线程看门狗

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


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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值