Главная страница
    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.5 MB
Время: 0.038 c
2-1172490784
Нуб
2007-02-26 14:53
2007.03.18
try except


3-1166606471
wezzz
2006-12-20 12:21
2007.03.18
Как разово перевести dbf-файл (формат dBase IV) в FoxPro?


2-1172237689
Аликъ
2007-02-23 16:34
2007.03.18
Адрес


1-1169635612
Newer
2007-01-24 13:46
2007.03.18
Адрес папки


15-1172191674
vasIZmax
2007-02-23 03:47
2007.03.18
О "миллионе долларов"...





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