Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Как консольному app выполнить действия при получении консолью WM_CLOSE (нажать крестик)?
|
|||
|---|---|---|---|
|
#18+
Дмитрий77Но все одно не понимаю, что ты имеешь ввидуЯ хочу сказать, что есть два способа завершения приложения: 1. "Мягкий" - работает atexit(); 2. "Суровый" - работает abort(). Кошерный сервис-обёртка должен выдать сигнал мягкого завершения, выждать и только потом пристреливать зависшее приложение. Если NSSM "стреляет без предупреждения", то он тоже сосёт. P.S. Про Apache procrun - ничего не скажу: сорцы не особо изучал, а для запуска именно exe-приложений - не использовал. С java-приложениями (основное назначение) почти всё работает как из пушки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2014, 02:04 |
|
||
|
Как консольному app выполнить действия при получении консолью WM_CLOSE (нажать крестик)?
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovP.S. Вообще, конечно, забавно. Написание частей, требуемых для работой сервисом собственного приложения, выглядит сравнимым по сложности с теми усилиями, которые предприняты для того, чтобы заставить работать своё приложение под чужим сервисом-обёрткой А с чего ты взял что озвученная задача имеет отношение к "чтобы заставить работать своё приложение под чужим сервисом-обёрткой ". Задачу "сервиса" я давно и успешно решил 5 лет назад. Ну, маленький ньюанс с CTRL_LOGOFF_EVENT, "чтоб совсем хорошо было". К слову скажем, в существующем порно-варианте с переброской пары-файлов туда-сюда, что я приводил: Код: plaintext 1. 2. 3. 4. 5. 6. событие logoff вообще никак не учитывается. Это уж я блеск навожу. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2014, 02:04 |
|
||
|
Как консольному app выполнить действия при получении консолью WM_CLOSE (нажать крестик)?
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovКроме exit()/atexit() есть ещё abort(). Есть, соответственно и два сигнала - SIG_TERM и SIG_KILL. С названиями могу и ошибиться, но смысл понятен. Ну и ещё SIG_HUP. Это уже пошел чистый C++. Не готов экспериментировать. Мне хватает Opal-а с его мьютексами и заумностями, все ради кроссплатформенности. Честно говоря, WIN API я больше доверяю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2014, 02:10 |
|
||
|
Как консольному app выполнить действия при получении консолью WM_CLOSE (нажать крестик)?
|
|||
|---|---|---|---|
|
#18+
Дмитрий77Это уже пошел чистый C++Отнюдь. Чистый цэ-рантайм. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2014, 02:16 |
|
||
|
Как консольному app выполнить действия при получении консолью WM_CLOSE (нажать крестик)?
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovКошерный сервис-обёртка должен выдать сигнал мягкого завершения, выждать и только потом пристреливать зависшее приложение.Если NSSM "стреляет без предупреждения", то он тоже сосёт. Так я ж привел, как он завершает: Service shutdownFirst nssm will attempt to generate a Control-C event and send it to the application's console. Batch scripts or console applications may intercept the event and shut themselves down gracefully. Java applications tend to respond well to Control-C events. GUI applications do not have consoles and will not respond to this method. Not supported on Windows 2000. Secondly nssm will enumerate all windows created by the application and send them a WM_CLOSE message. Applications may follow the convention of responding to the message by initiating a graceful exit. Thirdly nssm will enumerate all threads created by the application and send them a WM_QUIT message, which will be received if the application has a thread message queue As a last resort nssm can call TerminateProcess() to request that the operating system forcibly terminate the application. The TerminateProcess() call cannot be trapped or ignored, so in most circumstances the application will be killed. However, it is unlikely that it will be able to perform any cleanup operations before it exits. Че, жестко? Я недавно "обновлял", последняя версия завершает четко. В версии NSSM 5-летней давности приложение "почему-то могло не завершиться" (возможно в силу каких-то мягкостей), подробности не копал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2014, 02:17 |
|
||
|
Как консольному app выполнить действия при получении консолью WM_CLOSE (нажать крестик)?
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovОтнюдь. Чистый цэ-рантайм. Ну, что тебе сказать. Религия у каждого своя, я вон даже C от C++ не особо отличаю. C-шные ф-ции с 10-ю подчеркиваниями это нечто. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2014, 02:20 |
|
||
|
Как консольному app выполнить действия при получении консолью WM_CLOSE (нажать крестик)?
|
|||
|---|---|---|---|
|
#18+
abort() : In both retail and debug builds, abort then checks whether an abort signal handler is set. If a non-default signal handler is set, abort calls raise(SIGABRT). Use the signal function to associate an abort signal handler function with the SIGABRT signal. You can perform custom actions—for example, clean up resources or log information—and terminate the app with your own error code in the handler function. If no custom signal handler is defined, abort does not raise the SIGABRT signal. Соответственно atexit() и signal() должны зарегистрировать одну и ту же функцию-обработчик. Тогда завершающая подчистка будет делаться корректно, вне зависимости от способа завершения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 06.05.2014, 02:37 |
|
||
|
|

start [/forum/topic.php?fid=57&msg=38633960&tid=2019494]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
78ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
40ms |
get tp. blocked users: |
1ms |
| others: | 12ms |
| total: | 171ms |

| 0 / 0 |
