心跳防护程序的功能及使用方法

来源:互联网 发布:神武2手游多开软件 编辑:程序博客网 时间:2024/05/01 23:43
心跳防护程序的功能及使用方法
心跳防护程序的作用
心跳防护程序用于实现无人值守的程序的自维护功能,使得被防护程序由于某种异常而导致崩溃时可以自动重新启动,满足无人值守的环境要求。
心跳防护程序适用于那些需要无人值守,长期运行,但程序由于不确定性因素有出现崩溃的可能。说明:本程序不是用来防护代码质量差的程序的。
心跳防护程序的组成
心跳防护程序由两部分组成。分别用于心脏跳动和心脏恢复。
第一部分为心跳计数模块,需要植入被防护程序中,作为程序的心脏。当程序运行正常时,心跳计数也会正常进行。该模块以动态库形式发布。提供心跳启动和心跳终止两个接口。
第二部分为心跳恢复模块。由心跳计数模块启动,监控被防护程序的运行状态,当发现被防护程序运行异常时,删除已存在的进程,重新启动被防护程序,实现心跳继续。该模块以应用程序形式存在。
心跳防护程序的原理
      心跳防护程序的核心是在心脏跳动和心脏恢复两个模块之间创建一个信号量。心脏跳动模块负责给信号量增值,心脏恢复模块负责给信号量减值。增减值采用同一频率(每秒一次)。当心脏跳动正常时,信号量的值基本保持不变。如果心脏跳动异常(比如程序崩溃),信号量将不增加。心脏恢复模块通过减值可以侦测到信号量为0,此时认为被防护程序已出现问题,删除被防护程序的已有进程(通过进程名称),然后重新启动新程序。这样就可以保持被防护程序的持续运行。
心跳防护程序的使用
需要将心跳计数模块引入被防护程序。心跳计数模块为动态库,名为HeartBeat.dll。需要在被防护程序中包含HeartBeat.lib,并引入HeartBeat.h文件。本动态库包含两个接口函数,分别为:
启动心跳函数:StartHeartBeat((char * pszProgamName,int nTimeOut)
本函数用于启动心跳计数。需要在被防护程序启动时调用。一般可以在OnInitInstance函数中。第一个参数为被防护程序的全路径,可以用GetModuleFileName函数获取,第二个参数为超时时间,即多长时间被防护程序没有计数即认为异常,单位为秒。
终止心跳函数:StopHeartBeat()

       本函数用于正常终止被防护程序,可在OnExitInstance函数中调用。正常终止时,同时会终止心跳恢复进程。


http://blog.csdn.net/happyparrot/article/details/1062501 转自