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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 32, средняя оценка - 4.97
yurart
0 / 0 / 0
Регистрация: 16.08.2010
Сообщений: 6
#1

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

16.08.2010, 18:53. Просмотров 4266. Ответов 11
Метки нет (Все метки)

Я так себе представляю, имеется два варианта выхода из приложения, с передачей кода возврата:
1. Функцией ExitProcess(код возврата);
2. Функцией exit(код возврата);

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

разница между указатель на функцию и функция возврата указателя? - C++
подскажите пожалуйста очень срочно надо (вопрос на зачет)

Как при запуска программы из командной строки узнать код возврата? - C++
int main() { return 0; } Как при запуска этой программы из командной строки узнать код возврата?

Функция возврата массива - C++
Элементы матрицы заданы соотношением:a_(i,j) =(ln^2i/(1.5-7j))^3+e^(i+j). Пользуйтесь редактором формул внизу страницы Переписываю,...

Переполнение буфера, адрес возврата - C++
Подскажите пожалуйста, где можно найти адрес возврата при переполнении буфера. Visual Studio 2012 windows 8.1

Поясните по записи возврата из ф-ции - C++
Вот так люди пишут? int foo() { int n=0; cin>>n; return std::move(n); }

Метод возврата текущего значения - C++
Доброго времени суток, уважаемые форумчани! Подскажите пожалуйста, как написать метод возвращения текущего значения счетчика. Вот есть...

11
Nameless One
Эксперт С++
5775 / 3425 / 255
Регистрация: 08.02.2010
Сообщений: 7,448
16.08.2010, 19:06 #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
0
alex_x_x
бжни
2449 / 1654 / 84
Регистрация: 14.05.2009
Сообщений: 7,162
16.08.2010, 19:07 #3
как минимум exit - функция стандартной библиотеки, а ExitProcess - api функция ядра windows
0
yurart
0 / 0 / 0
Регистрация: 16.08.2010
Сообщений: 6
16.08.2010, 19:36  [ТС] #4
exit. Как я обнаружил: "При выполнении этой функции происходит сброс всех частично заполненых буферов ввода-вывода с закрытием соответствующих потоков (файлов, pipes, FIFO, socket'ов), после чего инициируется системный вызов прекращения работы процесса и перевода его в состояние закончил исполнение." (http://cragen.narod.ru/cos/man/exit.htm). Так же, как и exitprocess, позволяет передавать код возврата.

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

C++
1
2
3
4
5
myAppClass::Exitinstance (int retCode)
{
CWinApp::ExitInstance();
return retCode;
}
тема закрыта
0
17.08.2010, 23:03
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.08.2010, 23:03
Привет! Вот еще темы с ответами:

функция возврата булевого значения - C++
Здравствуйте!Помогите пожалуйста,объясните! вот есть функция : bool check_signs(char a,char *signs) { int i; for...

Механизм возврата ссылки на переменную - C++
Здравствуйте! Не совсем понятен механизм возвращения из функции типа "ссылка на.." и использование функции в выражениях в качестве...

Способы возврата данных из функции - C++
какими способами можно возвратить данные из функции(передать копию, адрес или ссылку)?????

Функция возврата указателя на элемент массива - C++
Написать программу с функцией, аргументом которой передается двумерный числовой массив. Результатом функцией возвращается указатель на...


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru