开启辅助访问 切换到宽版

精易论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

用微信号发送消息登录论坛

新人指南 邀请好友注册 - 我关注人的新帖 教你赚取精币 - 每日签到


求职/招聘- 论坛接单- 开发者大厅

论坛版规 总版规 - 建议/投诉 - 应聘版主 - 精华帖总集 积分说明 - 禁言标准 - 有奖举报

查看: 5982|回复: 40
打印 上一主题 下一主题
收起左侧

[易语言纯源码] 用批处理监测程序运行

[复制链接]
跳转到指定楼层
发表于 2019-6-13 13:21:54 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式   江苏省徐州市
分享源码
界面截图:
是否带模块: 纯源码
备注说明: -
本帖最后由 vioer 于 2019-6-13 13:26 编辑

不知道能不能发到这里,因为不是易语言的源码....

先声明一下,批处理我绝对是个半吊子,之所以用这种办法,也是被逼无奈...

我用小精灵给自己心爱的游戏写了个挂机程序.小精灵那个东西,用过的都知道,是相当的不稳定.尤其一旦使用了"多线程",那不是会不会崩溃,而是什么时候崩溃的问题.改用易语言以后,崩溃的可能已经大为降低,但自己这个垃圾水平自己也清楚,所以把这个东西又重新掏出来,算是给自己的程序加了层保护.

挂机程序要求24小时不能停,最怕的就是自己挂掉.当程序挂掉时,批处理可以强制程序重新启动.

不知道大神是怎么解决程序偶尔崩溃的问题,这是我的土办法,如果有更好的办法,也希望不吝赐教.

回到刚才那句话,我是个半吊子,不是批处理的专家,代码也是东抄一段,西抄一段.乱七八糟的拼到一起.但有一点我可以声明,这段代码运行了大半年没出过毛病.像我这种业余选手,能用就是好东西,要求不高.至于代码写的规范不规范,我也不知道,希望大神看了不要笑....

先说下原理:
你的程序开始运行以后,每隔一段时间(这个时间根据你的程序情况而定),记录一个时间戳,这个时间戳写到一个INI文件里.
批处理程序循环检测这个时间戳,并计算出当前时间与这个时间戳的差.
如果你的程序停止运行,时间戳的记录就停止了,与当前时间的差值就会越来越大,当这个差值大于你预定的值,就强制杀掉进程,重新启动程序.

我的INI文件格式:
  
[索引]
程序运行=12:41:54.00
程序监测=1


注意这个INI文件里各项的名称,与你的批处理是一一对应的,其中[程序运行]就是那个时间戳,[程序监测]是批处理运行开关,为1时批处理运行,为0批处理不运行,也就是停止监测.这个开关根据情况写到你的程序里去修改它.

下面是批处理程序:
  
@echo off
title 运行监测
::设置检测时间checktime,单位是秒,超出checktime即判定超时。
set checktime=300
::设置连续检查次数checkit,只有连续出现checkit+1次超时才进行下一步动作,防止误杀!
set checkit=5
echo 连续出现%checkit%+1次%checktime%秒超时将重新启动程序!!!
echo 监测开始运行!
setlocal ENABLEDELAYEDEXPANSION
::检查监测开关状态,决定是否运行本监测
call :解析 "你的INI文件地址.ini"
call :提取 索引 程序监测 jiance
::echo %jiance%
if %jiance%==1 (exit)
Endlocal
set /a checknum=0
:循环中
setlocal ENABLEDELAYEDEXPANSION
set ptime=0
set iniva=0
::echo %checknum%
call :解析 "你的INI文件地址.ini"
call :提取 索引 程序运行 iniva
::echo %iniva%
set vatime=%time%
::echo %vatime%
call :etime %iniva% %vatime% ptime
set /a ptime=ptime/100
::echo %ptime%
echo ====================================
echo %date% %time:~0,-3% 程序延时为%ptime%秒
if %ptime% gtr %checktime% (
set /a checknum=checknum+1
echo 出现错误!!!检查第%checknum%次!!!
) else (
Endlocal
set checknum=0
echo 正常检测中。。。
)
if %checknum% gtr %checkit% (
echo 程序停止运行!!!!
echo %date% %time:~0,-3% 你的程序停止运行,强制重启!>>路径\记录日志log.txt
taskkill /f /im 你的程序.EXE
::延时5秒
choice /t 5 /d y /n >nul
::程序既然已经挂掉,直接杀进程,包括你的主程序,和相关程序全部杀掉.
taskkill /f /im 你的程序.EXE
choice /t 5 /d y /n >nul
taskkill /f /im 相关程序.EXE
choice /t 5 /d y /n >nul
::杀掉进程后,重新启动程序
start "" "路径\你的程序.EXE"
::下面是3分钟的延时,时间自己定.
choice /t 60 /d y /n >nul
choice /t 60 /d y /n >nul
choice /t 60 /d y /n >nul
)
choice /t 45 /d y /n >nul
goto 循环中
::检测时间戳子程序 (计算当前时间与时间戳的时间差)
:etime <begin_time> <end_time> <return>
rem 所测试任务的执行时间不超过1天 // 骨瘦如柴版
setlocal&set be=%~1:%~2&set cc= (%%d-%%a)*360000+ (1%%e-1%%b)*6000+1%%f-1%%c&set dy=-8640000
for /f "delims=: tokens=1-6" %%a in ("%be:.=%")do endlocal&set/a %3=%cc%,%3+=%dy%* ("%3>>31")&exit/b
::解析INI文件
:解析 [参数 #1 =ini文件路径]
set "op="
for /f " usebackq tokens=1* delims==" %%a in ("%~1") do (
if "%%b"=="" (
set "op=%%a"
) else (
set " ##!op!# %%a=%%b"
)
)
goto :eof

::提取INI参数
:提取 [参数 #1 =Option] [参数 #2 =Key] [参数 #3 =value]
set "%~3=! ##[ %~1] # %~2!"
goto :eof


提醒一下,批处理要在你的程序开始运行以后再启动.

关键地方都有注释,有疑问也不要问我,因为...............很多地方我也不明白......(尤其是子程序里的,都是抄来的...我只是拼到一起...)
对照着INI文件和批处理反复调试,你会成功的...

评分

参与人数 1好评 +1 收起 理由
1301ok + 1 支持开源~!感谢分享

查看全部评分


签到天数: 7 天

39
发表于 2023-10-9 18:56:05 | 只看该作者   湖南省长沙市
感谢分享
回复 支持 反对

使用道具 举报

结帖率:0% (0/2)
38
发表于 2019-6-19 23:05:31 | 只看该作者   甘肃省兰州市
支持开源!感谢分享 !
回复 支持 反对

使用道具 举报

签到天数: 20 天

37
发表于 2019-6-18 22:36:00 | 只看该作者   广东省阳江市
支持开源!感谢分享 !
回复 支持 反对

使用道具 举报

结帖率:100% (4/4)

签到天数: 3 天

36
发表于 2019-6-18 02:22:05 | 只看该作者   广东省东莞市
6666666666
回复 支持 反对

使用道具 举报

结帖率:100% (2/2)
35
发表于 2019-6-17 20:28:01 | 只看该作者   浙江省杭州市
感谢分享~~~~~~~
回复 支持 反对

使用道具 举报

结帖率:88% (15/17)

签到天数: 1 天

34
发表于 2019-6-17 00:12:56 | 只看该作者   河北省唐山市
看一下咋用啊
回复 支持 反对

使用道具 举报

33
发表于 2019-6-16 18:34:11 | 只看该作者   山东省临沂市
感谢分享666666
回复 支持 反对

使用道具 举报

结帖率:96% (24/25)

签到天数: 1 天

32
发表于 2019-6-16 10:12:55 | 只看该作者   安徽省阜阳市
666666666666666666666666666
回复 支持 反对

使用道具 举报

签到天数: 4 天

31
发表于 2019-6-15 21:47:11 | 只看该作者   广东省广州市
#在这里快速回复#        支持开源~!感谢分享
回复 支持 反对

使用道具 举报

30
发表于 2019-6-15 12:36:23 | 只看该作者   江苏省苏州市
看看批处理怎么写的
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则 致发广告者

发布主题 收藏帖子 返回列表

sitemap| 易语言源码| 易语言教程| 易语言论坛| 易语言模块| 手机版| 广告投放| 精易论坛
拒绝任何人以任何形式在本论坛发表与中华人民共和国法律相抵触的言论,本站内容均为会员发表,并不代表精易立场!
论坛帖子内容仅用于技术交流学习和研究的目的,严禁用于非法目的,否则造成一切后果自负!如帖子内容侵害到你的权益,请联系我们!
防范网络诈骗,远离网络犯罪 违法和不良信息举报QQ: 793400750,邮箱:[email protected]
网站简介:精易论坛成立于2009年,是一个程序设计学习交流技术论坛,隶属于揭阳市揭东区精易科技有限公司所有。
Powered by Discuz! X3.4 揭阳市揭东区精易科技有限公司 ( 粤ICP备12094385号-1) 粤公网安备 44522102000125 增值电信业务经营许可证 粤B2-20192173

快速回复 返回顶部 返回列表