-
При закрытии COM-сервера я сначала закрываю все приложения, которые с ним связаны. Это у меня реализовано в событии OnClose основной формы сервера. Однако если при работающем приложении пользователь нажал на компе кнопку "выключить", приложение-сервер завершается, а вот те приложения, что с ним связаны начинают ругаться на отсутствие сервера и все виснет. Как этого избежать?
-
зделать обработчик ошибок , это как минимум
-
надо, чтобы сервер не закрывался, пока не отключатся все клиенты
-
> Это у меня реализовано в событии OnClose основной формы > сервера
для этого лучше подходит событие OnCloseQuery
-
То umbra: дык это понятно :) Еще бы вот реализовать это не криво. Есть вариант что-то типа такого:
OnClose: While FindWindow(nil, 'MyProg') <> 0 do;
Типа ждем, пока есть окно с таким именем... А на счет OnCloseQuery - так это ж просто запрос на возможность закрытия окно - не более чем, и от OnClose в данном случае ничем не отличается.
То Array - обработчик ошибок? А его реализация? В .dpr файле try Application.Run; except end; - криво это. А как тогда иначе?
-
> [4] Alex_C © (04.12.06 16:51)
а TComServer.ObjectCount не поможет?
-
> а TComServer.ObjectCount не поможет?
А каким образом? Как я понял, он лишь показывает кол-во подключенных к серверу приложений. А я их и так знаю. А вот как их закрыть до закрытия сервера?
-
> как их закрыть до закрытия сервера?
вообще-то в этом случае неплохо бы предупредить клиента. Что, дескать, на сервере начинаются профилактические работы и ежели он в течение N минут не сохранит данные и не закроется, то... Ну в общем, кто не спрятался... Можно это через посылку сообщения клиентам сделать. А в обработчике включить таймер и по истечении просто MainForm.Close
-
> Однако если при работающем приложении пользователь нажал > на компе кнопку "выключить", приложение-сервер завершается, > а вот те приложения, что с ним связаны начинают ругаться > на отсутствие сервера и все виснет. Как этого избежать?
Обрабатывать WM_QUERYENDSESSION в сервере и приложениях. Вести try..except для обращений к серверу, он может вырубиться и по другим причинам.
Можно ввести сообщение/CallBack функцию для предупреждения клиента о том что сервак вырубился.
|