您的位置:首页 > 其它

WIN32限制程序执行时长功能的实现

2010-04-09 14:55 288 查看
最近做的东东要求防止死循环,如果发生死循环,需要自动退出,简单点的做法可以保存执行前的时间,每次循环时检查此时的时间。

这种做法太耗费资源,而且如果循环可能发生的地方很多,就会很麻烦。

于是,就是下面的做法,新开一个进程,通过系统内核同步对象来实现。

监视函数如下:

//监视执行情况的线程,使用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编程的一些知识,代码看不懂建议先补充一下知识。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐