我正在写一个允许两个程序竞争的国际象棋游戏,玩家需要编写一个DLL并公开一个函数来告诉主应用程序他的玩家接下来要移动的位置,假设该函数看起来像这样
public static void MoveNext(out int x, out int y, out int discKind);
Run Code Online (Sandbox Code Playgroud)
播放器的DLL可以使用C#或C++编写.
在国际象棋游戏应用程序中,我启动一个新线程来调用玩家的DLL暴露的功能,以获得他将在一个回合中移动的位置,并且我启动计时器以防止玩家超时,如果玩家超时我会杀死相应的遵循API的线程
thread.Abort();
thread.Join();
Run Code Online (Sandbox Code Playgroud)
我有以下问题如下所述:
线程不能被100%保证杀死(这取决于玩家的代码)
在测试期间,我发现,如果播放器使用深度递归(并且如果播放器程序中存在内存泄漏),则主机应用程序的内存使用量将增加,然后主机应用程序将终止,没有任何异常.
是否有任何技术,想法或方法可以解决上述问题?
从这个CodeInChaos建议将播放器的DLL加载到单独的域,然后在必要时卸载它,我不确定它是否仍然适用于非托管DLL(C++),如果它会导致低效率?
| 归档时间: |
|
| 查看次数: |
201 次 |
| 最近记录: |