Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
16.06.2020, 17:46
|
|||
---|---|---|---|
|
|||
Как корректно завершить программу |
|||
#18+
Имеется: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14.
команды сборки: Код: plaintext 1. 2.
При запуске выводится окно сообщения. После нажатия на кнопку "ОК" процесс остается в памяти и висит фоновым. Приходится убивать вручную. Насколько корректно его закрывать вызовом ? Код: plaintext 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
|
16.06.2020, 17:49
|
|||
---|---|---|---|
|
|||
Как корректно завершить программу |
|||
#18+
IlyamIНасколько корректно его закрывать вызовом ? Лучше так не делать. Убери из строки сборки ключ ENTRY. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
|
16.06.2020, 17:56
|
|||
---|---|---|---|
|
|||
Как корректно завершить программу |
|||
#18+
Dimitry Sibiryakov Лучше так не делать. Убери из строки сборки ключ ENTRY. LINK : error LNK2001: неразрешенный внешний символ "WinMainCRTStartup" Хочу оставить в файле минимум необходимого ... |
|||
:
Нравится:
Не нравится:
|
|||
|
16.06.2020, 17:59
|
|||
---|---|---|---|
|
|||
Как корректно завершить программу |
|||
#18+
IlyamILINK : error LNK2001: неразрешенный внешний символ "WinMainCRTStartup" Убери ещё и NODEFAULTLIB. Не на твоём уровне создавать barebone программы. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
|
16.06.2020, 18:00
|
|||
---|---|---|---|
Как корректно завершить программу |
|||
#18+
Dimitry Sibiryakov IlyamIНасколько корректно его закрывать вызовом ? Лучше так не делать. Убери из строки сборки ключ ENTRY. Может там /NODEFAULTLIB играет? Это же вроде отключение CRT, т.е. отключили стандартную библиотеку вместе с кодом завершения приложения. Тогда ExitProcess() выглядит логичным. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
16.06.2020, 18:14
|
|||
---|---|---|---|
|
|||
Как корректно завершить программу |
|||
#18+
petravТогда ExitProcess() выглядит логичным. Так-то оно да, но во-первых, процесс таки должен завершаться после завершения последнего потока (то есть что-то там ещё не так), а во-вторых, нужно всю программу написать без капли рантайма, а на это способен не каждый (лично я - точно нет). Я даже понятия не имею какую сигнатуру должна иметь голая точка входа. Подозреваю, что это может быть вообще "void foo()". Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
|
16.06.2020, 18:41
|
|||
---|---|---|---|
Как корректно завершить программу |
|||
#18+
Dimitry Sibiryakov petravТогда ExitProcess() выглядит логичным. Так-то оно да, но во-первых, процесс таки должен завершаться после завершения последнего потока (то есть что-то там ещё не так)... О корректном выходе из своих потоков в любом случае нужно самостоятельно заботится. А так приложение завершается после выхода из основного потока. Остальные просто убиваются. Dimitry Sibiryakov а во-вторых, нужно всю программу написать без капли рантайма, а на это способен не каждый (лично я - точно нет). Так там ничего сложного, в WinAPI есть все аналоги стандартной библиотеки. Функции строк/памяти/мьютексов и т.д. Там, кажется, только тригонометрии нет. Dimitry Sibiryakov Я даже понятия не имею какую сигнатуру должна иметь голая точка входа. Подозреваю, что это может быть вообще "void foo()". Там есть несколько стандартных сигнатур функции WinMain(). Собственно один из этих вариантов у ТС в коде. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
16.06.2020, 18:46
|
|||
---|---|---|---|
|
|||
Как корректно завершить программу |
|||
#18+
petravА так приложение завершается после выхода из основного потока. Остальные просто убиваются. Авотхрен. Это как раз поведение стандартной CRT, которая по выходу из main() вызывает ExitProcess(). А barebone процессы завершаются только после завершения всех потоков, у них нет главного. Это Рихтер пишет в первых же главах. petrav Там есть несколько стандартных сигнатур функции WinMain(). Авотопятьхрен. Это снова поведение стандартных заголовков CRT. https://docs.microsoft.com/en-us/cpp/build/reference/entry-entry-point-symbol?view=vs-2019 The function must be defined to use the __stdcall calling convention. The parameters and return value depend on if the program is a console application, a windows application or a DLL. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
16.06.2020, 19:29
|
|||
---|---|---|---|
Как корректно завершить программу |
|||
#18+
Dimitry Sibiryakov petravА так приложение завершается после выхода из основного потока. Остальные просто убиваются. Авотхрен. Это как раз поведение стандартной CRT, которая по выходу из main() вызывает ExitProcess(). А barebone процессы завершаются только после завершения всех потоков, у них нет главного. Это Рихтер пишет в первых же главах. Давно читал Рихтера... Не помню там такого. Ну вот сейчас человек в конце функции main() вызовет руками ExitProcess() и чем это будет отличаться от поведения CRT? Можно, конечно, порассуждать, что если мы подгрузили некую библиотеку Windows, а она создала свой технологический поток и его нужно как-то корректно завершить... иначе всё песец. Но я сильно сомневаюсь в этом. Дескрипторы файлов на запись закрыл и можно прощаться. Dimitry Sibiryakov petrav Там есть несколько стандартных сигнатур функции WinMain(). Авотопятьхрен. Это снова поведение стандартных заголовков CRT. https://docs.microsoft.com/en-us/cpp/build/reference/entry-entry-point-symbol?view=vs-2019 The function must be defined to use the __stdcall calling convention. The parameters and return value depend on if the program is a console application, a windows application or a DLL. А что вы понимаете под CRT? Я понимаю стандартные библиотеки Си/С++, но тут то от них отказываются. Естественно о деструкторах глобальных объектов можно (нужно) забыть. Действительно есть несколько стандартных сигнатур WinMain(). Именно с них стартует приложение, а совсем не с main(). ... |
|||
:
Нравится:
Не нравится:
|
|||
|
16.06.2020, 19:33
|
|||
---|---|---|---|
|
|||
Как корректно завершить программу |
|||
#18+
petravЕстественно о деструкторах глобальных объектов можно (нужно) забыть. И о конструкторах. И о memory manager. И вообще о всём stdio.h. Об исключениях и прочих плюсах можно даже не вспоминать. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
|
17.06.2020, 09:03
|
|||
---|---|---|---|
Как корректно завершить программу |
|||
#18+
IlyamI INK : error LNK2001: неразрешенный внешний символ "WinMainCRTStartup" возможно это связано с тем, что у тебя WinMain __cdecl, а должно быть __stdcall, исправляется добавлением INT APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR lpCmdLine, INT nCmdShow) надо еще проверить, что у тебя с UNICODE'ностью проблем нет. Попробуй заменить сигнатуру на Код: plaintext 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/topic.php?fid=57&mobile=1&tid=2017403]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
37ms |
get topic data: |
10ms |
get forum data: |
3ms |
get page messages: |
44ms |
get tp. blocked users: |
1ms |
others: | 269ms |
total: | 395ms |
0 / 0 |