【发布时间】:2011-07-22 14:41:48
【问题描述】:
我正在编写一个允许两个程序竞争的国际象棋游戏,玩家需要编写一个 DLL 并公开一个函数来告诉主应用程序他的玩家下一步将移动到哪里,假设函数如下所示
public static void MoveNext(out int x, out int y, out int discKind);
播放器的 DLL 可以使用 C# 或 C++ 编写。
在国际象棋游戏应用程序中,我启动一个新线程来调用玩家的 DLL 暴露的函数以获取他将在回合中移动的位置,并启动一个计时器以防止玩家超时,如果玩家超时我会按照API杀死对应的线程
thread.Abort();
thread.Join();
我有如下问题:
线程不能100%被杀死(取决于玩家的代码)
在测试过程中我发现,如果播放器使用深度递归(如果播放器程序中存在内存泄漏),宿主应用程序的内存使用会增加,然后宿主应用程序将终止任何例外。
有没有什么技术、想法或方法可以处理上述问题?
从此CodeInChaos建议将播放器的DLL加载到单独的域中,然后在必要时将其卸载,我不确定它是否仍然适用于非托管DLL(C++),是否会导致效率低?
【问题讨论】: