c中的"看门狗"或沙盒系统

BCS*_*BCS 2 .net timeout sandbox

我有一个函数,我想允许运行一段给定的时间,然后,如果它没有自行退出,则中止.做这个的最好方式是什么?

我想到的最好的方法是在另一个线程中运行它,等待超时让它死掉然后用Thread.Abort()它来杀死它(如果函数有错误的catch块,这可能不起作用).另一种选择(一种我不知道如何工作的选择)将是某种先发制人的计时器.

有没有更好的办法?某种简单的沙箱系统?


编辑:我将要运行的功能没有任何系统来检查它是否应该取消,我不能(因为一定不能)添加它.此外,这是一个各种各样的测试工具,所以我将杀死该功能的条件是它已经运行了.在那种情况下,我不能指望它正确地做任何事情.

Mic*_*urr 5

对于像这样的事情可能有点过分,但你可以考虑是否要将托管该线程的任何内容加载到AppDomain中.AppDomain本质上是一个.NET沙箱.

如果线程进入杂草,你可以杀死AppDomain.