Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.03.18;
Скачать: CL | DM;

Вниз

Насколько верен следующий код завершения программы:   Найти похожие ветки 

 
Дмитрий Белькевич ©   (2007-01-23 01:27) [0]

PostThreadMessage(ProcessInfo.dwThreadId, WM_Quit, 0, 0);

Закрываю другую программу из своей, запускал createprocess.

В этом случае программа коректно завершится? Не хочется экспериментировать. Внешне всё ок.
Больше всего интересует - запишуться ли данные в базу. База - firebird 1.0/1.5.


 
Германн ©   (2007-01-23 01:31) [1]


> Больше всего интересует - запишуться ли данные в базу. База
> - firebird 1.0/1.5.

А на www.ibase.ru что говорят по этому поводу? Или ты там и не спрашивал?


 
Сергей М. ©   (2007-01-23 08:36) [2]


> В этом случае программа коректно завершится?


Не факт.


> запишуться ли данные в базу


Тоже не факт.


> запускал createprocess


Чем не устроила работа с FB как с сервисом ?


 
Дмитрий Белькевич ©   (2007-01-24 05:49) [3]

Я не fb прибиваю, а своё приложение другим своим же. Вот меня и интересует, успеет ли оно закрыть корректно все транзакции?


 
Сергей М. ©   (2007-01-24 08:17) [4]


> Дмитрий Белькевич ©   (24.01.07 05:49) [3]


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


Это зависит от реакции осн.потока твоего приложения на сообщение WM_QUIT.
Если при этом ты предпринимаешь необходимые действия по корректному завершению неподтвержденных т/акций, то нет повода для волнений.


 
Дмитрий Белькевич ©   (2007-01-25 02:32) [5]

Спасибо за ответ.
Еще вопрос: может потоку что нибудь другое, менее жесткое послать?
Windows же как-то закрывает корректно, по крайней мере, никогда проблем не было.
Может какой-нибудь WM_ENDSESSION послать?


 
Джо ©   (2007-01-25 04:40) [6]

> [5] Дмитрий Белькевич ©   (25.01.07 02:32)
> Спасибо за ответ.
> Еще вопрос: может потоку что нибудь другое, менее жесткое
> послать?
> Windows же как-то закрывает корректно, по крайней мере,
> никогда проблем не было.
> Может какой-нибудь WM_ENDSESSION послать?

Ну, посылай заранее условленное сообщение, какое-нибудь WM_USER + 666 и соответственно обрабатывай его, со всеми нужными действиями. Программы же обе твои?


 
Сергей М. ©   (2007-01-25 09:56) [7]


> Дмитрий Белькевич ©   (25.01.07 02:32) [5]


У тебя что, безоконное приложение ?


 
Дмитрий Белькевич ©   (2007-01-25 13:09) [8]

>WM_USER + 666

Спасибо, возможно так и сделаю. Да, приложения оба мои.

>У тебя что, безоконное приложение

Свёрнутое в трей, основная форма скрыта, но может быть развёрнута пользователем.


 
Дмитрий Белькевич ©   (2007-01-25 13:12) [9]

>Программы же обе твои

Если не сложно, хотелось бы еще, так сказать, для общего случая придумать вариант. То есть, останавливающее приложение - моё, останавливаемое - нет. Спасибо.


 
Сергей М. ©   (2007-01-25 13:27) [10]


> Дмитрий Белькевич ©   (25.01.07 13:09) [8]


У тебя есть окно с хэндлом Application.Handle.
Посылай этому окну сообщение WM_QUIT - и всех делов.


 
Дмитрий Белькевич ©   (2007-01-25 13:44) [11]

Имеет принципиальное значение треду слать, или окну слать?


 
Сергей М. ©   (2007-01-25 14:00) [12]


> Дмитрий Белькевич ©   (25.01.07 13:44) [11]


Конечно имеет.
Именно окну, а не треду.
Посмотри реализацию метода TApplication.Procesmessage() - сразу все прояснится.


 
MSDN   (2007-01-25 14:52) [13]

Дмитрий Белькевич ©   (25.01.07 13:44) [11]
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/WindowsUserInterface/Windowing/Windows/WindowReference/WindowMessages/WM_QUIT.asp

The WM_QUIT message is not associated with a window and therefore will never be received through a window"s window procedure. It is retrieved only by the GetMessage or PeekMessage functions.


 
Дмитрий Белькевич ©   (2007-01-25 15:22) [14]

Да я смотрел, что по wm_quit очередь фактически сразу же заканчивается.

Там поднимается Terminate, а application.run работает until Terminated.

Но какое отношение Application, в котором и крутиться очередь (и куда, как я понимаю, и попадают сообщения, посылаемые в тред) к основному (или какому-либо другому) окну?


 
Сергей М. ©   (2007-01-25 15:56) [15]


> Дмитрий Белькевич ©   (25.01.07 15:22) [14]


> какое отношение


Самое прямое)


 
Дмитрий Белькевич ©   (2007-01-25 16:17) [16]

>какое отношение

В контескте обсуждения wm_quit?


 
Сергей М. ©   (2007-01-25 16:24) [17]


> Там поднимается Terminate, а application.run работает until
> Terminated.
>


И что, этого не достаточно в твоем случае ?


 
Дмитрий Белькевич ©   (2007-01-26 03:11) [18]

Так и спрашиваю ;)


 
Сергей М. ©   (2007-01-26 08:08) [19]

imho, вполне достаточно.

Цикл в Application.Run() проверяет флаг Terminated и по факту его взведения завершается.


 
Дмитрий Белькевич ©   (2007-01-26 13:02) [20]

>Цикл в Application.Run() проверяет флаг Terminated и по факту его взведения завершается

Так, собственно в  [14] я это и говорил.

>imho, вполне достаточно.

Спасибо за мнение. Погоняю, посмотрю - практика рассудит.


 
Сергей М. ©   (2007-01-26 13:14) [21]


> Дмитрий Белькевич ©   (26.01.07 13:02) [20]


В [14] ты засомневался:


> какое отношение Application, в котором и крутиться очередь
> (и куда, как я понимаю, и попадают сообщения, посылаемые
> в тред) к основному (или какому-либо другому) окну?


Ответ прост - Application выбирает все сообщения, адресованные как окнам данного приложения, так и осн.треду процесса этого приложения. Прежде чем диспетчеризовать их, объект проверяет, не поступило ли сообщение WM_QUIT, причем никак не анализирует конкретного его адресата и не овечает на сообщение (согласно док-ции сообщение WM_QUIT не предполагает никакого ответа на него и может быть послано асинхронно). Так что в принципе WM_QUIT можно посылать и осн.треду с пом. PostThreadMessage, но, imho, все же логичней в случае с Application таки посылать его гл.окну, а не осн.треду.


 
Дмитрий Белькевич ©   (2007-01-26 15:00) [22]

Спасибо за ответ.
Делал именно так потому, что ProcessInfo.dwThreadId уже есть после запуска (CreateProcess"ом запускаю) - ничего искать дополнительно не нужно.



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

Текущий архив: 2007.03.18;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.072 c
2-1172155897
koha
2007-02-22 17:51
2007.03.18
что делает LoadResource?


15-1171660987
Ricks
2007-02-17 00:23
2007.03.18
Никола Тесла


1-1169483449
Dmitry_177
2007-01-22 19:30
2007.03.18
Непонятные ошибки при компиляции


15-1171803931
Eraser
2007-02-18 16:05
2007.03.18
Типовые драйвера


2-1172406975
Kolan
2007-02-25 15:36
2007.03.18
Memo.Lines.AddStrings долго отображает если много строк.