gpt4 book ai didi

c# - 如何使用 .NET 2.0 安全地托管插件

转载 作者:太空狗 更新时间:2023-10-29 21:06:45 26 4
gpt4 key购买 nike

我正在编写一个允许两个程序竞争的国际象棋游戏,玩家需要编写一个 DLL 并公开一个函数来告诉主应用程序他的玩家下一步将移动到哪里,假设该函数如下所示

public static void MoveNext(out int x, out int y, out int discKind);

播放器的 DLL 可以使用 C# 或 C++ 编写。

在国际象棋游戏应用程序中,我启动了一个新线程来调用玩家的 DLL 公开的函数,以获取他将在回合中移动的位置,并且我启动了一个计时器来防止玩家超时,如果玩家超时我会通过以下API杀死相应的线程

thread.Abort();
thread.Join();

我有以下问题,如下所述:

  1. 线程不能100%被kill(取决于玩家代码)

  2. 在测试过程中我发现,如果播放器使用深度递归(如果播放器程序中存在内存泄漏),宿主应用程序的内存使用量将会增加,然后宿主应用程序将被终止而不任何异常(exception)情况。

有没有什么技术、思路或方法可以解决上述问题?

来自这个 CodeInChaos 建议将播放器的DLL加载到单独的域中,然后在需要时卸载它,我不确定它是否仍然适用于非托管DLL(C++),是否会导致效率低下?

最佳答案

他们的 AppDomain 中未处理的异常仍然会导致您的程序在 .Net 2.0 中终止。您有机会通过事件处理程序响应异常,但没有处理它的能力。

您最好的选择是使用进程来实现您正在寻找的那种隔离。

关于c# - 如何使用 .NET 2.0 安全地托管插件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5427706/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com