Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.01.2009, 12:36   #1
SoLL
Пользователь
 
Регистрация: 26.07.2007
Сообщений: 18
Злость Проблема с ExitProcess

Ничего не понимаю!
Получаю код для выхода процесса. Передаю его в ExitProcess и моя прога закрывается.
Попробовал TerminateProcess - всё нормально работает.
Посмотрел что же за код передаётся в функцию. Оказалось, что для моей проги и для процесса, который хочу закрыть, код один и тот же. Делаю вывод, что т.к. код один, то сначала закрывается моё приложение, а до других очередь не доходит.
Почему коды-то одни и те же?
SoLL вне форума Ответить с цитированием
Старый 13.01.2009, 12:50   #2
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

А что ты хотел? ExitProcess завершает текущий процесс и больше ничего не делает! а код выхода нужен чтобы другая прога могла понять почему твой процесс завершился.
Поясни что ты хочешь от функции ExitProcess?
rpy3uH вне форума Ответить с цитированием
Старый 13.01.2009, 15:45   #3
SoLL
Пользователь
 
Регистрация: 26.07.2007
Сообщений: 18
По умолчанию

Ну в общем-то мне надо завершить процесс. Покопался в доках... Нашёл
TerminateProcess, а у него в описании сказано, что DLL он не выгружает и лучше пользоваться ExitProcess, что типа корректнее работает. А оказывается теперь, что она завершает текущий процесс. Если пользоваться TerminateProcess, то как же быть с DLL?
SoLL вне форума Ответить с цитированием
Старый 13.01.2009, 16:25   #4
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

если юзаешь TerminateProcess уничтожается процесс и всё что с ним связано. Освобождается вся его память (если точнее, то она просто пропадает), а следовательно все загруженные им DLL-ки выгрузятся автоматически. Не уничтожатся только те объекты, которые ещё юзают другие процессы.
В общем, если копать глубоко, то TerminateProcess в итоге вызывает ExitProcess в целевом процессе.
rpy3uH вне форума Ответить с цитированием
Старый 14.01.2009, 09:10   #5
SoLL
Пользователь
 
Регистрация: 26.07.2007
Сообщений: 18
По умолчанию

А, теперь понятно. Спасибо.
SoLL вне форума Ответить с цитированием
Старый 17.01.2009, 21:17   #6
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

Dll'ки, если ничем больше не используются, выгрузятся из памяти, но DllMain не будет вызвана и dll'ка не выполнит завершающие операции.
В общем, для завершения чужого процесса - TerminateProcess, для завершения своей проги лучше стандартные функции - exit (c), halt (pascal).
Somebody вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с рамами/Проблема с ЖД 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