|
|
|
Завершение программы без окна
|
|||
|---|---|---|---|
|
#18+
Есть программа: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. Окон она не создаёт, как поймать момент когда её хотят закрыть? Если завершение из Дебага по Ф2 или Из диспетчера задач - то естественно WM_CLOSE, WM_DESTROY не приходят, может есть ещё какие сообщения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2006, 15:28 |
|
||
|
Завершение программы без окна
|
|||
|---|---|---|---|
|
#18+
Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2006, 15:37 |
|
||
|
Завершение программы без окна
|
|||
|---|---|---|---|
|
#18+
это работает только с main, а вот аналог с WinMain, не могу найти :( IMHO, Mon$te® ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2006, 15:48 |
|
||
|
Завершение программы без окна
|
|||
|---|---|---|---|
|
#18+
Если процесс прибивается из диспетчера задач, никакие сообщения ему не приходят. Вызывается TerminateProcess и все, кирдык. Вообще никакой код в этом процессе больше не выполняется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2006, 16:44 |
|
||
|
Завершение программы без окна
|
|||
|---|---|---|---|
|
#18+
и при закрытии из-за окончания сессии, наверно также :( а вот в NIXах шлётся TERM сигнал сначала, я думал(аю) может в винАпи тоже аналог есть. но как его найти? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2006, 18:41 |
|
||
|
Завершение программы без окна
|
|||
|---|---|---|---|
|
#18+
Вообще-то atexit() работает независимо от того консольная программа или оконная. В оконных виндовых программах (которые с WinMain) функции упомянутые в atexit получают управление даже если программа умерла с GPF. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2006, 19:02 |
|
||
|
Завершение программы без окна
|
|||
|---|---|---|---|
|
#18+
2 White Owl не поже на правду :( ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2006, 19:32 |
|
||
|
Завершение программы без окна
|
|||
|---|---|---|---|
|
#18+
Почему не похоже? Похоже очень даже.... Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2006, 20:01 |
|
||
|
Завершение программы без окна
|
|||
|---|---|---|---|
|
#18+
я проверял, но с простой компиляцией (С++Builder), и не работало, хоть atexit возвращала 0 при регистрации. а как надо ? флаги компилятору указать или ещё что ? IMHO, Mon$te® ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2006, 20:10 |
|
||
|
Завершение программы без окна
|
|||
|---|---|---|---|
|
#18+
4d_monsterя проверял, но с простой компиляцией (С++Builder), и не работало, хоть atexit возвращала 0 при регистрации.Как проверял? Взял код который показал alex_k и заменил в нем main на WinMain? Тогда действительно работать не будет. Потому что в оконной программе (которая с WinMain) не создается консоль и соответствующие ей stdin/stdout. А мой пример работает, потому что я пишу в самостоятельно созданый файл. Никаких особых ключей не надо. Для Билдера хватит напоминания что надо делать оконное приложение (по умолчанию он делает консольное), а VC делает по умолчанию оконное. Берешь мой пример и в командной строке: > bcc32 -W atexit.c или > cl atexit.c В обоих случаях получишь одинаково работающие atexit.exe. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2006, 21:02 |
|
||
|
Завершение программы без окна
|
|||
|---|---|---|---|
|
#18+
проверял записью в файл + fflush, а иначе бы была ошибка на printf. а у вас ошибка, while не хватает, а иначе как прогу завершить принудительно: Код: plaintext 1. 2. 3. 4. 5. 6. 7. while (1) ; Код: plaintext 1. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.07.2006, 21:24 |
|
||
|
Завершение программы без окна
|
|||
|---|---|---|---|
|
#18+
Вам это зачем ? Хотите не дать принудительно завершить программу ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2006, 06:33 |
|
||
|
Завершение программы без окна
|
|||
|---|---|---|---|
|
#18+
Ну судя по самому первому посту, я всё таки хочу просто сделать CleanShutDown. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2006, 20:07 |
|
||
|
Завершение программы без окна
|
|||
|---|---|---|---|
|
#18+
Вообще, в виндах самый универсальный способ сделать этот самый CleanShutdown это вынести все вещи требующие правильного закрытия в dll. И положить весь выгружающий код в DllMain(PROCESS_DETACH). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.07.2006, 20:21 |
|
||
|
Завершение программы без окна
|
|||
|---|---|---|---|
|
#18+
4d_monsterНу судя по самому первому посту, я всё таки хочу просто сделать CleanShutDown.Ну создайте окно. Или сделайте программу сервисом. Или напишите другую программу, которая будет посылать этой какое-нибудь сообщение с помощью PostThreadMessage. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2006, 07:30 |
|
||
|
Завершение программы без окна
|
|||
|---|---|---|---|
|
#18+
White OwlВообще, в виндах самый универсальный способ сделать этот самый CleanShutdown это вынести все вещи требующие правильного закрытия в dll. И положить весь выгружающий код в DllMain(PROCESS_DETACH).Ну да, только это не поможет msdn TerminateProsessDLLs attached to the process are not notified that the process is terminating ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2006, 07:32 |
|
||
|
Завершение программы без окна
|
|||
|---|---|---|---|
|
#18+
Barlone White OwlВообще, в виндах самый универсальный способ сделать этот самый CleanShutdown это вынести все вещи требующие правильного закрытия в dll. И положить весь выгружающий код в DllMain(PROCESS_DETACH).Ну да, только это не поможет msdn TerminateProsessDLLs attached to the process are not notified that the process is terminating Ась? А если заглянуть в тот же MSDN и прочитать описание DLL_PROCESS_DETACH, то: MSDN:DllMain - DLL_PROCESS_DETACHThe DLL is being unloaded from the virtual address space of the calling process as a result of unsuccessfully loading the DLL, termination of the process , or a call to FreeLibrary. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2006, 18:22 |
|
||
|
Завершение программы без окна
|
|||
|---|---|---|---|
|
#18+
White Owl WO> The DLL is being unloaded from the virtual address space WO> of the calling process as a result of unsuccessfully WO> loading the DLL, termination of the process, or a call to WO> FreeLibrary. А кто сказал, что при любом "терминэйшне" будет вызван DllMain, ась ? Делов-то на 5 минут - взять и проверить. Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2006, 22:23 |
|
||
|
Завершение программы без окна
|
|||
|---|---|---|---|
|
#18+
Карабас БарабасА кто сказал, что при любом "терминэйшне" будет вызван DllMain, ась ? Делов-то на 5 минут - взять и проверить.Так лениво же :) Ну ладно... ща.... .... В пять минут не уложился. Целых десять потребовалось... Похоже что MSDN врет :) Нате, пробуйте. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.07.2006, 23:57 |
|
||
|
Завершение программы без окна
|
|||
|---|---|---|---|
|
#18+
White OwlПохоже что MSDN врет :) вот что в билдеровской справке написано: Syntax #include <stdlib.h> int atexit(void (_USERENTRY * func)(void)); Description Registers termination function. atexit registers the function pointed to by func as an exit function. Upon normal termination of the program , exit calls func just before returning to the operating system. fcmp must be used with the _USERENTRY calling convention. Each call to atexit registers another exit function. Up to 32 functions can be registered. They are executed on a last-in, first-out basis (that is, the last function registered is the first to be executed). Return Value atexit returns 0 on success and nonzero on failure (no space left to register the function). Posted via ActualForum NNTP Server 1.3 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.07.2006, 07:28 |
|
||
|
|

start [/forum/topic.php?fid=57&fpage=342&tid=2030783]: |
0ms |
get settings: |
8ms |
get forum list: |
18ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
53ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
| others: | 222ms |
| total: | 376ms |

| 0 / 0 |
