Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
monster Гость
|
Добавлено: Чт Сен 26 2002 09:47 Заголовок сообщения: ЛЮДИ ПОМОГИТЕ!!! ПЛИЗ!!!! ВОПРОС ПО ОСВОБОЖДЕНИЮ ПАМЯТИ!!! |
|
|
Помогите пожалуйста!!!! Откликнитесь, кому не лень!!!! Ситуация такая - с помощью програмки грохается процес!!!! потом запускается какой-нибудь другой процесс!!!! проблема заключается в следующем - после удаления процесса, память не освобождается!!! и при нескольких удалениях и запусках новых процессов, выдается сообщение, что памяти не хватает!!!! ПОМОГИТЕ РЕШИТЬ!!! ЗАРАНЕЕ БЛАГОДАРЕН!!!! MONSTER!!! |
|
Вернуться к началу |
|
![](templates/subSilver/images/spacer.gif) |
kleo
Зарегистрирован: 05.11.2002 Сообщения: 57
|
Добавлено: Чт Сен 26 2002 10:38 Заголовок сообщения: Re: ЛЮДИ ПОМОГИТЕ!!! ПЛИЗ!!!! ВОПРОС ПО ОСВОБОЖДЕНИЮ ПАМЯТИ!!! |
|
|
А с помощью какой проги??? |
|
Вернуться к началу |
|
![](templates/subSilver/images/spacer.gif) |
Daiser
Зарегистрирован: 28.01.2002 Сообщения: 44 Откуда: Челябинск
|
Добавлено: Чт Сен 26 2002 11:23 Заголовок сообщения: Re: ЛЮДИ ПОМОГИТЕ!!! ПЛИЗ!!!! ВОПРОС ПО ОСВОБОЖДЕНИЮ ПАМЯТИ!!! |
|
|
А какая ОСь? |
|
Вернуться к началу |
|
![](templates/subSilver/images/spacer.gif) |
and3008
Зарегистрирован: 12.10.2001 Сообщения: 14893 Откуда: Н.Новгород
|
Добавлено: Чт Сен 26 2002 16:34 Заголовок сообщения: Мдя... (+) |
|
|
Память обычно берут функцией malloc, а особождают функцией free. Если процесс убивается админом, память не всегда освобождается. Например если программер замутил использование этой память с какими-нибудь системными API, то система честно считает что память еще нужна.
Что сказать... Надо код проги глядеть. |
|
Вернуться к началу |
|
![](templates/subSilver/images/spacer.gif) |
Andy_user Гость
|
Добавлено: Пт Сен 27 2002 09:39 Заголовок сообщения: Ответ на Мдя... |
|
|
Каждый процесс имеет Handle процесса. При выделении памяти по запросу процесса создается Handle объекта под названием "память". Handle памяти - это индекс в таблице памяти. В записи (строке) этой таблицы содержится информация о Handle процесса, запросившего память, указатель на начало этой памяти, объем выделенной памяти. При аварийном (принудительном) завершении процесса запись в таблице выделенной памяти остается, а процесса с таким Handle уже нет. Доступ к этой таблице возможен ТОЛЬКО из режима ядра ОС. Вывод - подчистить таблицу можно только имея код, работающий в режиме ядра (например драйвер).
Смотри код программы, не смотри - все едино... |
|
Вернуться к началу |
|
![](templates/subSilver/images/spacer.gif) |
monster Гость
|
Добавлено: Пт Сен 27 2002 11:45 Заголовок сообщения: Re: ЛЮДИ ПОМОГИТЕ!!! ПЛИЗ!!!! ВОПРОС ПО ОСВОБОЖДЕНИЮ ПАМЯТИ!!! |
|
|
Прога написана на Delphi!!! Создаётся процесс (запускается прог-ма через [ShelEvecuteEx]), потом этот процесс грохается Terminate procces, в результате память не освоюождается. После нескольких подобных процедур, выдаётся сообщение о нехватки памяти и происходит зависание!!! Monster! |
|
Вернуться к началу |
|
![](templates/subSilver/images/spacer.gif) |
monster Гость
|
Добавлено: Пт Сен 27 2002 11:46 Заголовок сообщения: Re: ЛЮДИ ПОМОГИТЕ!!! ПЛИЗ!!!! ВОПРОС ПО ОСВОБОЖДЕНИЮ ПАМЯТИ!!! |
|
|
Под WinNT!!!!!
Прога написана на Delphi!!! Создаётся процесс (запускается прог-ма через [ShelEvecuteEx]), потом этот процесс грохается Terminate procces, в результате память не освоюождается. После нескольких подобных процедур, выдаётся сообщение о нехватки памяти и происходит зависание!!! Monster!!!! |
|
Вернуться к началу |
|
![](templates/subSilver/images/spacer.gif) |
monster Гость
|
Добавлено: Пт Сен 27 2002 12:02 Заголовок сообщения: Re: Ответ на Мдя... |
|
|
Расскажи, пожалуйста, поподробней о том как подчистить таблицу!!! Как это вообще делается, если не трудно!!! Вот код этой проги: // Запуск проги
procedure TForm1.RunCalliseum(); begin ExecuteFile:='D:\Calliseum\callman.exe'; FillChar(SEInfo, SizeOf(SEInfo), 0); SEInfo.cbSize := SizeOf(TShellExecuteInfo); with SEInfo do begin fMask := SEE_MASK_NOCLOSEPROCESS; Wnd := Application.Handle; lpFile := PChar(ExecuteFile); nShow := SW_SHOWNORMAL; end; if ShellExecuteEx(@SEInfo) then begin repeat Application.ProcessMessages; GetExitCodeProcess(SEInfo.hProcess, ExitCode); until (ExitCode STILL_ACTIVE) or Application.Terminated; end else ShowMessage('Error starting Calliseum!'); end;
.. // Процесс терминэйтится и опять запускается TerminateProcess(SEInfo.hProcess, ExitCode); RunCalliseum(); Monster!!!! |
|
Вернуться к началу |
|
![](templates/subSilver/images/spacer.gif) |
monster Гость
|
Добавлено: Пт Сен 27 2002 12:03 Заголовок сообщения: Re: Мдя... (+) |
|
|
Может ты подскажешь, что добавить в код,чтоб память освобождалась??? Вот код этой проги: // Запуск проги
procedure TForm1.RunCalliseum(); begin ExecuteFile:='D:\Calliseum\callman.exe'; FillChar(SEInfo, SizeOf(SEInfo), 0); SEInfo.cbSize := SizeOf(TShellExecuteInfo); with SEInfo do begin fMask := SEE_MASK_NOCLOSEPROCESS; Wnd := Application.Handle; lpFile := PChar(ExecuteFile); nShow := SW_SHOWNORMAL; end; if ShellExecuteEx(@SEInfo) then begin repeat Application.ProcessMessages; GetExitCodeProcess(SEInfo.hProcess, ExitCode); until (ExitCode STILL_ACTIVE) or Application.Terminated; end else ShowMessage('Error starting Calliseum!'); end;
.. // Процесс терминэйтится и опять запускается TerminateProcess(SEInfo.hProcess, ExitCode); RunCalliseum(); Monster!!! |
|
Вернуться к началу |
|
![](templates/subSilver/images/spacer.gif) |
Daiser
Зарегистрирован: 28.01.2002 Сообщения: 44 Откуда: Челябинск
|
Добавлено: Пт Сен 27 2002 13:31 Заголовок сообщения: Re: ЛЮДИ ПОМОГИТЕ!!! ПЛИЗ!!!! ВОПРОС ПО ОСВОБОЖДЕНИЮ ПАМЯТИ!!! |
|
|
Тогда я не совсем понимаю, что ты делаешь. Если ты запускаешь внешнюю программу, то по ее нормальном завершении TerminateProcess тебе совершенное не нужен - она же сама завершилась. А TerminateProcess служит для аварийного завершения процесса в случае критической ошибки. При этом все объекты созданные процессом (в том числе и выделенная память) сохраняются в системе. Т.е. все у тебя нормально ) Почитай MSDN на эту тему. |
|
Вернуться к началу |
|
![](templates/subSilver/images/spacer.gif) |
monster Гость
|
Добавлено: Пт Сен 27 2002 13:41 Заголовок сообщения: Re: ЛЮДИ ПОМОГИТЕ!!! ПЛИЗ!!!! ВОПРОС ПО ОСВОБОЖДЕНИЮ ПАМЯТИ!!! |
|
|
Нет... Понимаешь, тут такая штука, что внешнюю программу время от времени приходится заверщать именно через TerminateProcces, потом я делаю кае-какие изменения и запускаю прогу занова, подругому никак нельзя.... Вот в чём проблема та... Monster!!! Если хочешь, то посмотри код проги: // Запуск проги
procedure TForm1.RunCalliseum(); begin ExecuteFile:='D:\Calliseum\callman.exe'; FillChar(SEInfo, SizeOf(SEInfo), 0); SEInfo.cbSize := SizeOf(TShellExecuteInfo); with SEInfo do begin fMask := SEE_MASK_NOCLOSEPROCESS; Wnd := Application.Handle; lpFile := PChar(ExecuteFile); nShow := SW_SHOWNORMAL; end; if ShellExecuteEx(@SEInfo) then begin repeat Application.ProcessMessages; GetExitCodeProcess(SEInfo.hProcess, ExitCode); until (ExitCode STILL_ACTIVE) or Application.Terminated; end else ShowMessage('Error starting Calliseum!'); end;
.. // Процесс терминэйтится и опять запускается TerminateProcess(SEInfo.hProcess, ExitCode); RunCalliseum(); |
|
Вернуться к началу |
|
![](templates/subSilver/images/spacer.gif) |
Daiser
Зарегистрирован: 28.01.2002 Сообщения: 44 Откуда: Челябинск
|
Добавлено: Пт Сен 27 2002 13:46 Заголовок сообщения: Re: ЛЮДИ ПОМОГИТЕ!!! ПЛИЗ!!!! ВОПРОС ПО ОСВОБОЖДЕНИЮ ПАМЯТИ!!! |
|
|
Может есть смысл запускать программу из отдельно созданного потока (CreateThread), который ты можешь в любой момент корректно завершить. |
|
Вернуться к началу |
|
![](templates/subSilver/images/spacer.gif) |
Daiser
Зарегистрирован: 28.01.2002 Сообщения: 44 Откуда: Челябинск
|
Добавлено: Пт Сен 27 2002 13:48 Заголовок сообщения: Re: ЛЮДИ ПОМОГИТЕ!!! ПЛИЗ!!!! ВОПРОС ПО ОСВОБОЖДЕНИЮ ПАМЯТИ!!! |
|
|
Да, и попробуй задать этот вопрос в форуме по программированию. |
|
Вернуться к началу |
|
![](templates/subSilver/images/spacer.gif) |
and3008
Зарегистрирован: 12.10.2001 Сообщения: 14893 Откуда: Н.Новгород
|
Добавлено: Пт Сен 27 2002 14:02 Заголовок сообщения: А где у тебя объект SEInfo объявлен и где он создается? (-) |
|
|
- |
|
Вернуться к началу |
|
![](templates/subSilver/images/spacer.gif) |
monster Гость
|
Добавлено: Пт Сен 27 2002 14:15 Заголовок сообщения: Re: А где у тебя объект SEInfo объявлен и где он создается? (-) |
|
|
Он объявляется глобально, и является набором свойств, для ShelExecuteEx.... |
|
Вернуться к началу |
|
![](templates/subSilver/images/spacer.gif) |
monster Гость
|
Добавлено: Пт Сен 27 2002 14:23 Заголовок сообщения: Спасибо!!! |
|
|
Мпасибо за совет.... Примного благодарен!!! Vjycnth |
|
Вернуться к началу |
|
![](templates/subSilver/images/spacer.gif) |
bary
Зарегистрирован: 22.05.2002 Сообщения: 453 Откуда: Moscow
|
Добавлено: Пт Сен 27 2002 18:53 Заголовок сообщения: Совет |
|
|
Для завершения какого либо приложения или процесса удаленно на тачке можно использовать прогу Hyena www.systemtools.com там посмотри может и не нужна тебе твоя писанина на Делфи _________________ Bari Murtazin - MSFT |
|
Вернуться к началу |
|
![](templates/subSilver/images/spacer.gif) |
monster Гость
|
Добавлено: Пн Сен 30 2002 13:44 Заголовок сообщения: Re: Совет |
|
|
А что конкретно выполняет данная программа??? |
|
Вернуться к началу |
|
![](templates/subSilver/images/spacer.gif) |
|