如何实现限制一个函数的执行时间?也就是设定一个强制停止函数运行的时间。

lufy_king 2009-05-08 03:45:25
//我自己设想的如下:
getMac.Start(new object[] { ip.ToString() });
System.Threading.Timer timer = new System.Threading.Timer(new TimerCallback(timerCall), getMac, 500, 0);//500秒后关闭线程
System.Threading.Thread.Sleep(1000);//等待定时器的判断
//定时器
private void timerCall(object obj)
{
if (...)
{
getMac.Abort(); //关闭线程
}
result = "";
}
//线程
void doGetMac(object argument)
{
fun();//一个执行时间不固定的函数。注意:此函数不可重入!
}

这样做,速度好慢啊。。。要怎么样做才好呢???
...全文
375 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
guoyichao 2009-05-11
  • 打赏
  • 举报
回复
伪限制:

delegate void a();
a f = func;
IAsyncResult result = f.BeginInvoke(delegate(IAsyncResult ar)
{
f.EndInvoke(ar);
}, null);
result.AsyncWaitHandle.WaitOne(500, false);

这个不能阻止函数执行完成,但是可以让函数的调用线程在调用超时后获得执行权。
hhhh63 2009-05-11
  • 打赏
  • 举报
回复
[Quote=引用楼主 qwerqwerf 的帖子:]
这样做,速度好慢啊。。。要怎么样做才好呢???
[/Quote]

想法有问题,关闭线要等到线程中的函数执行完了才会关闭。
关闭进程可以结束正在执行的程序,应该程序就退出来了,会造成不可预知后果。

从外部结束一个函数的做法是错误的,只能在函数内部加一个计数器或计时器超时以后就返回。


freewind0521 2009-05-11
  • 打赏
  • 举报
回复
设置一个timer,当开始时启动一个线程,设置一个全局变量,标识执行开始,当到一定时间后去检查全局标识变量,发现还在执行,就强制结束进程
蓝海D鱼 2009-05-08
  • 打赏
  • 举报
回复
UP

110,526

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧