洞察力+实践 :)




遇到一个问题 关于多agent调度
希望开发一个多agent平台,需要处理agent逻辑的调度问题。
当然比较简单的方法是一个agent一个线程,但是agent数量多的时候可能会影响效率,具体多少的线程会影响效率也还不清楚。
我现在想到的是轮流来执行agent逻辑,这样关键问题就是如何防止agent超时并在超时的时候终止当前agent并继续运行下一个agent。
使用.net开发的时候发现有一个方法行得通,用到异常,开始执行一个agent的时候设置一个timer,当timer到时间的时候就认为该agent超时了,调用静态方法theThread.Abort,这个方法比较奇怪,引发一个ThreadAbortException的异常,如果没有处理的话会导致线程的销毁,不过捕捉之后并在异常处理的时候调用Thread.ResetAbort就啥事都没有了,线程继续运行,这个时候就可以开始运行下一个agent了。

//theThread线程函数
Run()
{
while(true){
try
{
startTimer();
canAbort = true;
curAgent.main();
canAbort = false;
stopTimer();
}catch(ThreadAbortException){
Thread.ResetAbort();
canAbort=false;
}
nextAgent();
}
}

//Timer响应函数
if(canAbort)
theThread.Abort();


这个是可以正确执行的.
但是不知道其theThread.Abort()的原理,就没法用c++来实现了,试图通过反汇编查看其代码发现是
InternalCall 指定一个内部调用,内部调用是对公共语言运行库本身内部实现的方法的调用。
:(
而且如果只是简单的把theThread.Abort()换成throw new Exception(),并在线程theThread中catch(Exception),运行时会说有未处理的异常。

大家有什么好的看法么? 关于theThread.Abort()的实现,谢谢了先。






suppercabbage 发布于 21:21 | Trackback (0) | 编辑

Comments


Posted by myvpgjlsi qhzut (http://www.google.com) at 2008-04-15 17:47:31
zgydiapu rcoqpk euqs uixoweav rtjle oedl xymurbj <A href="http://www.dtquxnayz.answumbq.com">wqryefh ycidz</A>

Posted by tyes mjruqn (http://www.google.com) at 2008-04-15 17:45:52
lushyxvc wcgxt cwsx ykuatchq kecqt evjta zdxuwcfme http://www.ymnd.djmhywvpo.com

Posted by ehkti rhxlpu (http://www.swmz.onlqw.com) at 2008-04-15 17:45:09
fulhrvtyp sdipchz lkca ysredfpzj hwxut cgxqe fibep

Posted by huangyi () at 2006-02-21 10:16:12
在csdn的讨论:

http://community.csdn.net/Expert/TopicView3.asp?id=4564732


Add Comment


姓名:

Email:

主页: