|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
13.01.2009, 12:36 | #1 |
Пользователь
Регистрация: 26.07.2007
Сообщений: 18
|
Проблема с ExitProcess
Ничего не понимаю!
Получаю код для выхода процесса. Передаю его в ExitProcess и моя прога закрывается. Попробовал TerminateProcess - всё нормально работает. Посмотрел что же за код передаётся в функцию. Оказалось, что для моей проги и для процесса, который хочу закрыть, код один и тот же. Делаю вывод, что т.к. код один, то сначала закрывается моё приложение, а до других очередь не доходит. Почему коды-то одни и те же? |
13.01.2009, 12:50 | #2 |
добрый няша
Старожил
Регистрация: 29.10.2006
Сообщений: 4,804
|
А что ты хотел? ExitProcess завершает текущий процесс и больше ничего не делает! а код выхода нужен чтобы другая прога могла понять почему твой процесс завершился.
Поясни что ты хочешь от функции ExitProcess? |
13.01.2009, 15:45 | #3 |
Пользователь
Регистрация: 26.07.2007
Сообщений: 18
|
Ну в общем-то мне надо завершить процесс. Покопался в доках... Нашёл
TerminateProcess, а у него в описании сказано, что DLL он не выгружает и лучше пользоваться ExitProcess, что типа корректнее работает. А оказывается теперь, что она завершает текущий процесс. Если пользоваться TerminateProcess, то как же быть с DLL? |
13.01.2009, 16:25 | #4 |
добрый няша
Старожил
Регистрация: 29.10.2006
Сообщений: 4,804
|
если юзаешь TerminateProcess уничтожается процесс и всё что с ним связано. Освобождается вся его память (если точнее, то она просто пропадает), а следовательно все загруженные им DLL-ки выгрузятся автоматически. Не уничтожатся только те объекты, которые ещё юзают другие процессы.
В общем, если копать глубоко, то TerminateProcess в итоге вызывает ExitProcess в целевом процессе. |
14.01.2009, 09:10 | #5 |
Пользователь
Регистрация: 26.07.2007
Сообщений: 18
|
А, теперь понятно. Спасибо.
|
17.01.2009, 21:17 | #6 |
Участник клуба
Регистрация: 08.10.2007
Сообщений: 1,185
|
Dll'ки, если ничем больше не используются, выгрузятся из памяти, но DllMain не будет вызвана и dll'ка не выполнит завершающие операции.
В общем, для завершения чужого процесса - TerminateProcess, для завершения своей проги лучше стандартные функции - exit (c), halt (pascal). |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Проблема с рамами/Проблема с ЖД | DRAGGER | Компьютерное железо | 6 | 04.01.2009 23:37 |
Проблема с gets() | TheWanderer | Общие вопросы C/C++ | 12 | 21.11.2008 14:35 |
Проблема | eldar | Работа с сетью в Delphi | 12 | 05.10.2008 18:10 |