Re[4]: Как проверить интерфейс на валидность?
От: Tom Россия http://www.RSDN.ru
Дата: 13.09.02 09:21
Оценка:
MF> Я еще пробывал такой вариант.
MF>CGarbageCollector запускал еще один поток, в котором вызывался метод интрефейса IClientCallback. Если объект не существует, то все ок...метод возвращал ошибку и сборщик мусора убивал эту сессию. А вот если клиент повисший (преславутый while(1), то созданный поток подвисает. Сборщик мусора ждет окончание выполнения данного потока в течении таймаута, по истечении которого он терминирует этот поток....Казалось бы все ок, НО....когда поток подвисает на вызове, он отедает 3-5 хэнделов (смотрел через TaskManager). При терминировании потока эти хэнделы ест-но не освобождаются, что не допустимо....

Так проблема тут не в валидности интерфейса, а в том что клиент виснет . Если клиента исправить нельзя, то тогда только по таймауту и только с потерей хенделов (если нельзя вывести клиента из while(1)), или после определения того, что произошёл тайм аут, как то корректно убивать клиента. Можно канечно извратиться типа приостанавливать поток, потом подсовывать ему код корректного выхода и запускать снова, но это точно изврат и не так просто.

ЗЫ: Мне кажется, что это проблемма не ком, а структуры приложения.
Народная мудрось
всем все никому ничего(с).
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.