Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Освобождение памяти после работы внешней программы [D4, Win95/98]


ed30 ©   (2002-11-29 13:30:00) 

Добрый день!

Подскажите пожалуйста, как можно (если это возоможно) очистить память после запуска и отработки внешнего приложения из моей программы.
В приведенном ниже куске, если его делать в цикле (да и для одного запуска тоже), постоянно "поедается" память.

TmpSt := PChar(cmdAcrobat + " " + "d:\test.ps");
iResult := WinExec(TmpSt, SW_SHOWMINNOACTIVE);
TheWindowHandle := FindAWindow("Acrobat", "");
if TheWindowHandle <> 0 then begin
GetWindowThreadProcessID(TheWindowHandle, @ProcessID);
ProcessHandle := OpenProcess(PROCESS_TERMINATE, FALSE, ProcessId);
TerminateProcess(ProcessHandle, 1);
CloseHandle(ProcessHandle);
end;

Через CreateProcess то же самое.

Заранее спасибо, Эд.


kostik78ua   (2002-12-01 00:00:00) [1]

Замена TerminateProcess (работает с DLL):

function NTKillProcess(iProcessID: Integer): Integer;
var
hProcess: Integer;
pfnExitProcess: Pointer;
hInstance: Integer;
hThread: DWORD;
begin
Result:=ERROR_SUCCESS;

hProcess:=OpenProcess(PROCESS_ALL_ACCESS, FALSE, iProcessID);

if hProcess > 0 then begin
hInstance:=GetModuleHandle("KERNEL32.DLL");
pfnExitProcess:=GetProcAddress(hInstance, "ExitProcess");
hThread:=CreateRemoteThread(hProcess, nil, 0, pfnExitProcess, nil, 0,hThread);
if hThread>0 then begin
WaitForSingleObject(hThread, 40000);
if not CloseHandle(hThread) then Result:=GetLastError;
end else Result:=GetLastError;
CloseHandle(hProcess);
end else Result:=GetLastError;
end;


Morfein   (2002-11-30 22:18:00) [2]

Обычно этим виндовый менджер памяти занимается...

А насчёт TerminateProcess вот чего в хэлпе написано :
TerminateProcesscauses all threads within a process to terminate, and causes a process to exit, but DLLs attached to the process are not notified that the process is terminating.


Наверх

Титульная страница Поиск, карта сайта Написать письмо