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

Вниз

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

 
Дмитрий Белькевич ©   (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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.044 c
3-1166513746
pvm
2006-12-19 10:35
2007.03.18
BDE+DB2


8-1152215431
Verstak
2006-07-06 23:50
2007.03.18
Проблема с Direct3D приложением


2-1172248355
Sfelt
2007-02-23 19:32
2007.03.18
Сохранение изображения


15-1171978977
Ega23
2007-02-20 16:42
2007.03.18
А куда в Delphi7 делся QuickReport?


5-1149955795
Alextp
2006-06-10 20:09
2007.03.18
Мерцание при обработке Resize





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский