Конференция "Corba" » Закрытие сервера [Delphi, Windows]
 
  • Alex_C © (04.12.06 15:48) [0]
    При закрытии COM-сервера я сначала закрываю все приложения, которые с ним связаны. Это у меня реализовано в событии OnClose основной формы сервера.
    Однако если при работающем приложении пользователь нажал на компе кнопку "выключить", приложение-сервер завершается, а вот те приложения, что с ним связаны начинают ругаться на отсутствие сервера и все виснет. Как этого избежать?
  • Array © (04.12.06 16:00) [1]
    зделать обработчик ошибок , это как минимум
  • umbra © (04.12.06 16:21) [2]
    надо, чтобы сервер не закрывался, пока не отключатся все клиенты
  • umbra © (04.12.06 16:27) [3]

    > Это у меня реализовано в событии OnClose основной формы
    > сервера

    для этого лучше подходит событие OnCloseQuery
  • Alex_C © (04.12.06 16:51) [4]
    То umbra: дык это понятно :) Еще бы вот реализовать это не криво. Есть вариант что-то типа такого:

    OnClose:
        While FindWindow(nil, 'MyProg') <> 0 do;

    Типа ждем, пока есть окно с таким именем...
    А на счет OnCloseQuery - так это ж просто запрос на возможность закрытия окно - не более чем, и от OnClose в данном случае ничем не отличается.

    То Array - обработчик ошибок? А его реализация? В .dpr файле
    try
     Application.Run;
    except
    end;
    - криво это. А как тогда иначе?
  • clickmaker © (04.12.06 16:54) [5]

    > [4] Alex_C ©   (04.12.06 16:51)

    а TComServer.ObjectCount не поможет?
  • Alex_C © (05.12.06 09:23) [6]

    > а TComServer.ObjectCount не поможет?


    А каким образом? Как я понял, он лишь показывает кол-во подключенных к серверу приложений. А я их и так знаю. А вот как их закрыть до закрытия сервера?
  • clickmaker © (05.12.06 09:40) [7]

    > как их закрыть до закрытия сервера?

    вообще-то в этом случае неплохо бы предупредить клиента. Что, дескать, на сервере начинаются профилактические работы и ежели он в течение N минут не сохранит данные и не закроется, то... Ну в общем, кто не спрятался...
    Можно это через посылку сообщения клиентам сделать. А в обработчике включить таймер и по истечении просто MainForm.Close
  • tesseract © (05.12.06 11:05) [8]

    > Однако если при работающем приложении пользователь нажал
    > на компе кнопку "выключить", приложение-сервер завершается,
    >  а вот те приложения, что с ним связаны начинают ругаться
    > на отсутствие сервера и все виснет. Как этого избежать?


    Обрабатывать WM_QUERYENDSESSION  в сервере и приложениях. Вести try..except для обращений к серверу, он может вырубиться и по другим причинам.

    Можно ввести сообщение/CallBack функцию для предупреждения клиента о том что сервак вырубился.
 
Конференция "Corba" » Закрытие сервера [Delphi, Windows]
Есть новые Нет новых   [134431   +9][b:0][p:0]