Я пишу игру в шахматы, которая позволяет конкурировать с двумя программами, игроку необходимо написать DLL и выставить функцию, чтобы сообщить основному приложению, куда его игрок будет двигаться дальше, предположим, функция выглядит как DLL этогоКак разместить плагины безопасно с .NET 2.0
public static void MoveNext(out int x, out int y, out int discKind);
игрока можно записать с помощью C# или C++.
В приложении для игры в шахматы я начинаю новый поток, чтобы вызвать функцию, которую DLL игрока открыла, чтобы добраться туда, где он будет двигаться в повороте, и я запускаю таймер, чтобы предотвратить таймауты игрока, если игровой тайм-аут я убью соответствующую нить с помощью следующих интерфейсов API
thread.Abort();
thread.Join();
у меня следующие вопросы, как описано ниже:
нить не может быть убита с 100 обеспечения% (это зависит от кода проигрывателя)
Во время теста я обнаружил, что если игрок использует глубокие рекурсии (и если в программе игрока есть утечка памяти), использование памяти приложения-хозяина будет увеличиваться, а затем приложение-хозяин будет прекращено без каких-либо исключения.
Существуют ли какие-либо методы, идеи или методы, которые могут справиться с вышеуказанными проблемами?
Из этого CodeInChaos предложил, чтобы загрузить DLL игрока в отдельный домен, а затем выгрузить его в случае необходимости, я не уверен, если он все еще работает для неуправляемых DLL (C++), и если это приведет к низкой эффективности?
Не могли бы вы дать мне более подробную информацию о том, как использовать процессы для решения моих проблем? –
Вам нужно будет создать вспомогательный процесс хостинга, который запустит среду для добавления, которая зависит от того, что требуется вашему добавлению в модели. – SuperIronBob
Вам нужно будет создать вспомогательный процесс хостинга, который запустит среду для добавления, которая зависит от того, что требуется вашему добавлению в модели. Тогда вам понадобится использовать механизм IPC для передачи данных в процесс хостинга и из него. Какой метод вы выберете, будет зависеть от того, сколько данных вам нужно передавать назад и вперед и как часто среди других причин. .Net Remoting и WCF - это два механизма, специфичные для .Net, которые должны сделать это проще. Области общей памяти, именованные каналы и COM - более агностические механизмы языка, которые вы можете использовать, но более сложные и нуждаются в дополнительной работе. – SuperIronBob