WIN32限制程序执行时长功能的实现
2010-04-09 14:55
288 查看
最近做的东东要求防止死循环,如果发生死循环,需要自动退出,简单点的做法可以保存执行前的时间,每次循环时检查此时的时间。
这种做法太耗费资源,而且如果循环可能发生的地方很多,就会很麻烦。
于是,就是下面的做法,新开一个进程,通过系统内核同步对象来实现。
监视函数如下:
主函数中需要加入:
这样就可以支持自动防止卡死了,需要用到WINDOWS编程的一些知识,代码看不懂建议先补充一下知识。
这种做法太耗费资源,而且如果循环可能发生的地方很多,就会很麻烦。
于是,就是下面的做法,新开一个进程,通过系统内核同步对象来实现。
监视函数如下:
//监视执行情况的线程,使用WINDOWS内核对象实现,保证程序执行后不会因为客户代码错误而耗费CPU资源; //由于等待时间包括了用户的输入时间(如果存在此函数),故非WEB版可以考虑去掉此线程; unsigned int __stdcall run_control(void * pHandle) { DWORD dw; dw=WaitForSingleObject(*(HANDLE *)pHandle,10000);//等待主线程执行结束或者10秒超时 switch(dw) { case WAIT_OBJECT_0:return 0; case WAIT_TIMEOUT:printf("错误:执行超时!");exit(1); case WAIT_FAILED:printf("错误:监视线程等待错误!");exit(1); } }
主函数中需要加入:
HANDLE hParent;//主线程句柄; /*GetCurrentThread()函数可以获得当前线程的伪句柄,使用下行的函数转换为真实句柄后传递给监视线程*/ DuplicateHandle( GetCurrentProcess(), GetCurrentThread(), GetCurrentProcess(), &hParent, 0, 0, DUPLICATE_SAME_ACCESS); //调用执行代码前开启监视进程 _beginthreadex(NULL,0,&run_control,&hParent,0,NULL); 后面继续客户化开发代码
这样就可以支持自动防止卡死了,需要用到WINDOWS编程的一些知识,代码看不懂建议先补充一下知识。
相关文章推荐
- 在WINDOWS任务计划程序下执行PHP文件 PHP定时功能的实现
- windows下的计划任务程序执行PHP文件 PHP定时功能的实现
- javascript中巧用“闭包”实现程序的暂停执行功能
- 在WINDOWS任务计划程序下执行PHP文件 PHP定时功能的实现
- win32 汇编实现全盘文件扫描功能(杀毒程序的扫描全盘文件功能)
- 使用Win32 API实现限制编辑框输入的功能
- 限制程序中某类操作的执行次数的算法设计及C代码实现
- 使用服务程序实现PHP定时执行任务功能
- python 调用海康linux下demo的可执行程序,设置回调,实现人脸识别 以及实现抓拍功能
- 在WINDOWS任务计划程序下执行PHP文件 PHP定时功能的实现
- javascript中巧用“闭包”实现程序的暂停执行功能
- 创建一个学生系统,实现一下功能; * 1:增加学生 * 2:显示学生 * 3:修改学生 * 4:删除学生 * 5:查找学生 * 6:退出程序 * 请输入选择(
- 微信小程序实现倒计时补零功能
- 在程序中实现录音功能的实现代码及…
- 微信小程序实现红包功能(后端PHP实现逻辑)
- 使用main函数的参数,实现一个整数计算器,程序可以接受三个参数,第一个参数“-a”选项执行加法,“-s”选项执行减法,“-m”选项执行乘法,“-d”选项执行除法,后面两个参数为操作数。
- 微信小程序实现tab页面切换功能
- [Win32]一个调试器的实现(八)单步执行
- 微信小程序之ES6与事项助手的功能实现