Как правильно завершить некое приложение

{codecitation class=»brush: pascal; gutter: false;» width=»600px»}

Автор: Nomadic

Если не принудительно, то можно послать на его Instance сообщение WM_QUIT. Если же необходимо принудительно терминировать приложение, то смотрите ниже — под Windows NT процесс можно терминировать через специально предназначенный для этого хэндл. Иначе гарантии нет. Предположим, что процесс создаем мы, ожидая его завершения в течение maxworktime. Тогда —

var

dwResult: Longint; // This example was converted from C source.

begin

// Not tested. Some ‘nil’ assignments must be applied

// as zero assignments in Pascal. Some vars need to

// be declared (maxworktime, si, pi). AA.

if CreateProcess(nil, CmdStr, nil, nil, FALSE,

CREATE_NEW_CONSOLE, nil, nil, si, pi) then

begin

CloseHandle(pi.hThread);

dwResult := WaitForSingleObject(pi.hProcess, maxworktime * 1000 * 60);

CloseHandle(pi.hProcess);

if dwResult WAIT_OBJECT_0 then

begin

pi.hProcess := OpenProcess(PROCESS_TERMINATE, FALSE, pi.dwProcessId);

if pi.hProcess nil then

begin

TerminateProcess(pi.hProcess, 0);

CloseHandle(pi.hProcess);

end;

end;

end;

end;

{/codecitation}

Добавить комментарий