Форум программистов, компьютерный форум CyberForum.ru

В чем разница между exit(код возврата) и ExitProcess (код возврата)? - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 32, средняя оценка - 4.97
yurart
0 / 0 / 0
Регистрация: 16.08.2010
Сообщений: 6
16.08.2010, 18:53     В чем разница между exit(код возврата) и ExitProcess (код возврата)? #1
Я так себе представляю, имеется два варианта выхода из приложения, с передачей кода возврата:
1. Функцией ExitProcess(код возврата);
2. Функцией exit(код возврата);

Чем отличаются данные функции?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.08.2010, 18:53     В чем разница между exit(код возврата) и ExitProcess (код возврата)?
Посмотрите здесь:

Механизм возврата ссылки на переменную C++
функция возврата булевого значения C++
C++ Метод возврата текущего значения
C++ функция для возврата длины строки
C++ разница между указатель на функцию и функция возврата указателя?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Nameless One
Эксперт С++
 Аватар для Nameless One
5753 / 3402 / 255
Регистрация: 08.02.2010
Сообщений: 7,393
16.08.2010, 19:06     В чем разница между exit(код возврата) и ExitProcess (код возврата)? #2
Про ExitProcess:
Цитата Сообщение от MSDN
Exiting a process causes the following:
All of the threads in the process, except the calling thread, terminate their execution without receiving a DLL_THREAD_DETACH notification.
The states of all of the threads terminated in step 1 become signaled.
The entry-point functions of all loaded dynamic-link libraries (DLLs) are called with DLL_PROCESS_DETACH.
After all attached DLLs have executed any process termination code, the ExitProcess function terminates the current process, including the calling thread.
The state of the calling thread becomes signaled.
All of the object handles opened by the process are closed.
The termination status of the process changes from STILL_ACTIVE to the exit value of the process.
The state of the process object becomes signaled, satisfying any threads that had been waiting for the process to terminate.
Про exit:
The value supplied as an argument to exit is returned to the operating system as the program's return code or exit code.
...
Issuing a return statement from the main function is equivalent to calling the exit function with the return value as its argument
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
16.08.2010, 19:07     В чем разница между exit(код возврата) и ExitProcess (код возврата)? #3
как минимум exit - функция стандартной библиотеки, а ExitProcess - api функция ядра windows
yurart
0 / 0 / 0
Регистрация: 16.08.2010
Сообщений: 6
16.08.2010, 19:36  [ТС]     В чем разница между exit(код возврата) и ExitProcess (код возврата)? #4
exit. Как я обнаружил: "При выполнении этой функции происходит сброс всех частично заполненых буферов ввода-вывода с закрытием соответствующих потоков (файлов, pipes, FIFO, socket'ов), после чего инициируется системный вызов прекращения работы процесса и перевода его в состояние закончил исполнение." (http://cragen.narod.ru/cos/man/exit.htm). Так же, как и exitprocess, позволяет передавать код возврата.

exitprocess, судя по сообщению Nameless One, завершая потоки, отключая dll, закрывая хэндлы, завершает работу текущего процесса (состояние процесса меняется на signaled, позволяя уничтожиться потокам, ожидающим завершения), плюс еще позволяет передавать через себя код возврата приложения.


Судя по описаниям выше, разница заключается в том, что exit не завершает все потоки приложения, а просто переводит состояние процесса в "Закончил исполнение" и он каким-то чудесным образом завершается. Круто. Может всё-таки описания данных двух функций - недостаточно полны, чтобы понять разницу между ними?

Так в чём же всё таки разница?
odip
Эксперт C++
 Аватар для odip
7225 / 3287 / 58
Регистрация: 17.06.2009
Сообщений: 14,165
16.08.2010, 19:56     В чем разница между exit(код возврата) и ExitProcess (код возврата)? #5
Может всё-таки описания данных двух функций - недостаточно полны, чтобы понять разницу между ними?
Наверняка.
Полное описание можно найти
для exit() - в сорцах того компилятора которым пользуешься
для ExitProcess() - в сорцах Windows, попрость у Microsoft
yurart
0 / 0 / 0
Регистрация: 16.08.2010
Сообщений: 6
16.08.2010, 19:57  [ТС]     В чем разница между exit(код возврата) и ExitProcess (код возврата)? #6
Цитата Сообщение от odip Посмотреть сообщение
Наверняка.
Полное описание можно найти
для exit() - в сорцах того компилятора которым пользуешься
для ExitProcess() - в сорцах Windows, попрость у Microsoft
Весело
alex_x_x
бжни
 Аватар для alex_x_x
2441 / 1646 / 84
Регистрация: 14.05.2009
Сообщений: 7,163
16.08.2010, 20:01     В чем разница между exit(код возврата) и ExitProcess (код возврата)? #7
Цитата Сообщение от odip Посмотреть сообщение
Наверняка.
Полное описание можно найти
для exit() - в сорцах того компилятора которым пользуешься
для ExitProcess() - в сорцах Windows, попрость у Microsoft
гугл же еще, но там неполное описание )
odip
Эксперт C++
 Аватар для odip
7225 / 3287 / 58
Регистрация: 17.06.2009
Сообщений: 14,165
16.08.2010, 20:07     В чем разница между exit(код возврата) и ExitProcess (код возврата)? #8
На самом деле я думаю так - если ты пишешь портабельную C-ную программу, то используй exit().
А если ты пишешь в стиле WinAPI - то используй ExitProcess().

Под Windows использование exit() наверняка в конце концов приводит к вызову ExitProcess().

Добавлено через 1 минуту
Весело
А ты чего хотел ?
Пропиетарные технологии - концов не найти.
В opensource хоть можно сорцы найти, посмотреть и попробовать понять.

MSDN - это вообще описание для идиотов.
Там 10% от нормальных описаний если есть и то хорошо.

Добавлено через 2 минуты
Еще замечу что ты даже не назвал компилятора которым пользуешься.
А ведь exit() наверняка зависит от компилятора.
yurart
0 / 0 / 0
Регистрация: 16.08.2010
Сообщений: 6
16.08.2010, 20:10  [ТС]     В чем разница между exit(код возврата) и ExitProcess (код возврата)? #9
Цитата Сообщение от odip Посмотреть сообщение
На самом деле я думаю так - если ты пишешь портабельную C-ную программу, то используй exit().
А если ты пишешь в стиле WinAPI - то используй ExitProcess().
Да просто вопрос возник из-за того, что функция в моей программе ExitProcess() вызывает исключение (ошибка доступа - 5), а exit() нормально отрабатывает. Не знаю, как агрументировать применение именно exit() вместо exitprocess().

Цитата Сообщение от odip Посмотреть сообщение
Под Windows использование exit() наверняка в конце концов приводит к вызову ExitProcess().
Да, это так. Однако, исключение не возникает.

Добавлено через 2 минуты
Компилятор от шестой студии.
odip
Эксперт C++
 Аватар для odip
7225 / 3287 / 58
Регистрация: 17.06.2009
Сообщений: 14,165
16.08.2010, 20:15     В чем разница между exit(код возврата) и ExitProcess (код возврата)? #10
exit() еще может вызывать завершающие функции, которые зарегистрированы c помощью вызова atexit().
Эти функции может устанавливать библиотека языка C для своих целей.
И не просто может - а наверняка устанавливает.

ExitProcess() про них знать ничего не знает и сразу пытается выйти.

У тебя программы threads вообще используются или нет ?
Вообще может в отладчик засунуть чтобы понять почему так.

Добавлено через 1 минуту
Компилятор от шестой студии.
Так с этого и нужно было начинать !!!
VC6 - выкинуть и никогда не пользоваться.
Устарела и Microsoft ее уже поди не поддерживает.
Ты на нее хоть SP6 поставил ?
Впрочем все равно выкинуть.
Это чтобы не мучиться с такими проблемами - почему не работает то или это под Windows XP.

Добавлено через 1 минуту
Бери хотя бы VS2005 минимально.
плюс Service Pack разумеется.
yurart
0 / 0 / 0
Регистрация: 16.08.2010
Сообщений: 6
16.08.2010, 20:20  [ТС]     В чем разница между exit(код возврата) и ExitProcess (код возврата)? #11
Отлаживался через файл. Иначе не отладиться. Запуск приложения происходит до залогинивания в систему.

threads в приложении не используются.

exit() еще может вызывать завершающие функции, которые зарегистрированы c помощью вызова atexit(). ExitProcess() про них знать ничего не знает и сразу пытается выйти.
Возможно.. Но тогда бы она никогда не работала, наверное.

Собираю исходники в той версии студии, в которой писались. У нас иначе нельзя.

Сервис-пак стоит, кажись.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.08.2010, 23:03     В чем разница между exit(код возврата) и ExitProcess (код возврата)?
Еще ссылки по теме:

C++ Как при запуска программы из командной строки узнать код возврата?
Переполнение буфера, адрес возврата C++
Способы возврата данных из функции C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
yurart
0 / 0 / 0
Регистрация: 16.08.2010
Сообщений: 6
17.08.2010, 23:03  [ТС]     В чем разница между exit(код возврата) и ExitProcess (код возврата)? #12
Как оказалось, завершать программу, написанную на mfc, корректнее всего будет, переопределив функцию Exitinstance () родительского класса нашего приложения - CWinApp.

Это будет выглядеть примерно так:

C++
1
2
3
4
5
myAppClass::Exitinstance (int retCode)
{
CWinApp::ExitInstance();
return retCode;
}
тема закрыта
Yandex
Объявления
17.08.2010, 23:03     В чем разница между exit(код возврата) и ExitProcess (код возврата)?
Ответ Создать тему
Опции темы

Текущее время: 16:44. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru