![]() |
1
10
不幸的是,没有100%安全的方法来终止线程 干净利落 虽然你可以尝试很多方法,但是它们都有一些副作用和缺点,你可能会考虑。 好好问吧 . 但是,如果您控制代码,这只是一种100%保证的方法。既然你不是,就不会是了。 问题来了。
让我们看看为什么合作也不是100%。 假设有问题的线程经常需要调用你的库代码,以便在屏幕上绘图,或者诸如此类。您可以轻松地对这些方法进行检查,并抛出异常。 然而,这个异常可能会被捕获,并被吞并。
我已经说过你不能。 然而,有一种方法可能有效。您可以将bot派生到自己的进程中,然后在进程超时时终止进程。这将为您提供更高的成功机会,因为至少操作系统会在进程死亡时处理它所管理的所有资源。当然,您可以让进程在系统上留下损坏的文件,所以它不是100%干净的。 以下是Joe Duffy的一篇博客文章,解释了很多关于这些问题: Managed code and asynchronous exception hardening . |
![]() |
2
4
|
![]() |
3
2
Thread 你自己,而不是依赖开始醒来。您可以通过线程。连接并且(不客气地)终止线程,如果必要的话,通过线程。中止. |
![]() |
4
2
This MSDN article 可能会为您提供一些关于如何使用TerminateThread函数更有效地终止失控线程的指导。 你真的必须尝试所有这些事情,并向自己证明这可能是最好的解决办法。 或者,如果这是一个竞争性的游戏,机器人作者必须公平地玩,你是否考虑过让游戏给每个机器人一个“回合令牌”,机器人必须在它想要调用的每个动作中呈现这个令牌,当游戏翻转时,它会给所有机器人一个新的令牌。这可能会让你现在只需要担心失控线程,而不是机器人谁需要花很长的时间在他们的回合。 编辑 只是为了增加一个地方让人们去看看 Security Permission Flag Enumerations 会让你知道从哪里开始。如果你移除了SecurityPermissionFlag.ControlThread控制线程权限(例如,仅给予代码执行权限,不包括ControlThread)您将删除它们的
我不知道有多少行动是无法进入的,但这将是一个有趣的周末演习,找出这个问题。 |
![]() |
5
1
粗略建议:
|
![]() |
6
0
另一种设计方案是允许每个bot都是自己的进程,然后使用IPC机制来交换数据。你通常可以终止一个进程而不产生任何可怕的影响。 |
|
Ma Joonyoung · 粗粒度和细粒度链表的时间比较 1 年前 |
![]() |
user1700890 · 了解交互式代理Python API中的线程 2 年前 |
![]() |
AntonBoarf · 为什么要将实例变量指定给局部变量? 2 年前 |
![]() |
rhymes · 如何让线程操作相同的java列表 3 年前 |