Как правильно завершить некое приложение
Автор: 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; |
Далее: Как правильно завершить некое приложение 2 »»