Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.07.15;
Скачать: [xml.tar.bz2];

Вниз

Мое приложение не дает сделать перезагрузку системы   Найти похожие ветки 

 
DelphiN! ©   (2007-06-13 16:14) [0]

в приложении используется ServerSocket, который видимо не дает моему приложению закрыться при запросе системы, из за этого перезагрузка, выключение или завершение текущего сеанса не происходит.
Отлавливаю системные события WM_QUERYENDSESSION и WM_ENDSESSION, обрабатываю их так :

 inherited;
 halt;


Однако при 1ой попытке перезагрузки системы моя программа завершается, но перезагрузки не происходит, если попробовать перезагрузить 2ой раз, то перезагрузка выполняется успешно ...

 Как выполнить перезагрузку с 1го раза?


 
Romkin ©   (2007-06-13 16:30) [1]

Не делать halt а нормально делать выход из приложения.


 
Сергей М. ©   (2007-06-13 16:40) [2]


> Как выполнить перезагрузку с 1го раза?
>


После хальта сказать хендехох - без этого перезагрузка невозможна.


 
DelphiN! ©   (2007-06-13 16:41) [3]

Переделал так :


procedure TfrmMain.WMQueryEndSession(var Message: TWMQueryEndSession);
begin
 inherited;
 CClose := true;
 Close;
end;

procedure FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
 CanClose := CClose;
end;


Эффект тот же ... :(


 
DelphiN! ©   (2007-06-13 16:42) [4]

Сергей М. ©   (13.06.07 16:40) [2]

Что за хендехох? :)


 
Сергей М. ©   (2007-06-13 16:51) [5]


> DelphiN! ©   (13.06.07 16:42) [4]


Ну а что за хальт ?)

Тебе чем Aplication.Terminate плох ? Или MainForm.Close ?


 
DelphiN! ©   (2007-06-14 09:11) [6]

От
 inherited;
 Application.Terminate
 


и


inherited;
CClose := true;
frmMain.Close;


и


 Application.Terminate
 


и


CClose := true;
frmMain.Close;


эффект одинаковый - перезагрузка со 2ой попытки!


 
DelphiN! ©   (2007-06-14 09:45) [7]

Также заметил что сообщение WM_QUERYENDSESSION моему окну не приходит, только WM_ENDSESSION, почему не понятно!


 
Сергей М. ©   (2007-06-14 11:34) [8]


> заметил что сообщение WM_QUERYENDSESSION моему окну не приходит


А событие OnCloseQuery у твоей формы возникает при завершении сессии ?


 
DelphiN! ©   (2007-06-14 12:17) [9]


> Сергей М. ©   (14.06.07 11:34) [8]
>
> А событие OnCloseQuery у твоей формы возникает при завершении
> сессии ?


Нет, не возникает тоже! На форме находится компонент TServerSocket. Если его не заставлять слушать порт, то программа завершается корректо, если он слушает порт, то ни OnCloseQuery ни WM_QUERYENDSESSION не приходят при попытки перезагрузки. Приходит только сообщение WM_ENDSESSION, в обработчике которого я и писал вышеописаный код, который лишь термирует приложение, не давая системе завершиться


 
Сергей М. ©   (2007-06-14 12:49) [10]

Режим у TServerSocket какой ? stThreadBlocking ?


 
DelphiN! ©   (2007-06-14 12:56) [11]

да, именно stThreadBlocking


 
DelphiN! ©   (2007-06-15 07:49) [12]

И как с этим бороться?


 
Сергей М. ©   (2007-06-15 08:27) [13]

1. При каком событии вы вызываешь ServerSocket.Active := False;
2. Как у тебя организована реакция потоков ServerSocket"а на команду терминирования ?


 
grisme ©   (2007-06-15 08:41) [14]

ExitProcess(0); не пробовал?


 
Сергей М. ©   (2007-06-15 10:07) [15]


> grisme ©   (15.06.07 08:41) [14]


Это тот же "Хальт ! Хенде хох !", только вид сбоку)


 
DelphiN! ©   (2007-06-22 14:07) [16]


> Сергей М. ©   (15.06.07 08:27) [13]


1. ServerSocket.Active := false делаю при получении события WM_ENDSESSION, события WM_ENDSESSION. События WM_QUERYENDSESSION не получаю совсем.

2. Не организована реакция потоков на комманду термирования ....


procedure TfrmMain.ServerSocket1GetThread(Sender: TObject;
 ClientSocket: TServerClientWinSocket;
 var SocketThread: TServerClientThread);
begin
 SocketThread := TServerThread.Create(false, ClientSocket);
end;

procedure TServerThread.ClientExecute;
var
 SockStream : TWinSocketStream;
 FileInfo   : array [0..10000] of char;
 FileStream : TStream;
 BytesSent  : LongInt;
 nRead      : Integer;

 str,s,IP,stmp: String;
 strl,Params: TStringList;
 FS: TFileStream;
 n,i: Integer;
 bool: Boolean;
 OV: OleVariant;
 Point: TPoint;
begin
 try
   SockStream := TWinSocketStream.Create(ClientSocket,60000);
   if (SockStream.WaitForData(60000)) then
   begin
...


 
Инс   (2007-06-22 14:33) [17]

Чисто из личного опыта... Была та же проблема, приложение не давало выйти из системы, так как че-то не то было в обработке WMQueryEndSession. Что я там только не писал, и Application.Terminate и Close - ниче не помогало. А дело оказалось вот в чем. У меня был сторонний компонент (руки поотрывать его разработчикам) который добавлял иконку в трей. Он создавал Message-only окошко с помощью AllocateHWnd. Так вот, в оконной функции этого окошка не стоял вызов Message.Result:=DefWindowProc (забыли или не посчитали нужным). При выходе из системы винда посылает сообщение WM_QueryEndSession всем окнам, и если хотя бы одно вернет 0, то завершения ситемы не происходит. Так и получалось без вызова Message.Result:=DefWindowProc. А обработка WMQueryEndSession у формы была ни причем.

Посмотрите, может у вас та же проблема...



Страницы: 1 вся ветка

Форум: "Начинающим";
Текущий архив: 2007.07.15;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.042 c
15-1180928443
vajo
2007-06-04 07:40
2007.07.15
А у нас уже второй день снег идет :)


2-1182500260
ИльяС
2007-06-22 12:17
2007.07.15
чтение из файла


2-1182176439
kyro
2007-06-18 18:20
2007.07.15
Заголовки mp3


2-1182464746
Lokk83
2007-06-22 02:25
2007.07.15
Обновление DBGRID по таймеру


15-1181413423
JanMihail
2007-06-09 22:23
2007.07.15
Начал изучать PHP





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский