Форум: "WinAPI";
Текущий архив: 2003.01.16;
Скачать: [xml.tar.bz2];
ВнизОсвобождение памяти после работы внешней программы Найти похожие ветки
← →
ed30 (2002-11-29 13:30) [0]Добрый день!
Подскажите пожалуйста, как можно (если это возоможно) очистить память после запуска и отработки внешнего приложения из моей программы.
В приведенном ниже куске, если его делать в цикле (да и для одного запуска тоже), постоянно "поедается" память.
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 то же самое.
Заранее спасибо, Эд.
← →
Morfein (2002-11-30 22:18) [1]Обычно этим виндовый менджер памяти занимается...
А насчёт TerminateProcess вот чего в хэлпе написано :
TerminateProcess causes 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.
← →
kostik78ua (2002-12-01 00:00) [2]Замена 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;
Страницы: 1 вся ветка
Форум: "WinAPI";
Текущий архив: 2003.01.16;
Скачать: [xml.tar.bz2];
Память: 0.44 MB
Время: 0.009 c