день добрый.
TProcess выполняется в процедуре.
нужно иметь возможность "убить гада", в любое время.
попытка не увенчалась...
схемо/код упрощен, но, надеюсь, смысл понятен.
кидайте любые идеи, ссылки, чтив, помидоры, буду разбираться.
спасибо.
Код: Выделить всё
prc : TProcess;
////////////////////////////////////////////////////////////////////////////////
procedure mainform.PrcPrep();
////////////////////////////////////////////////////////////////////////////////
begin //
prc.Options := prc.Options - [poWaitOnExit]; //
prc.Executable := 'path_to_exe'; //
prc.Parameters.Add('-arg1'); //
prc.Parameters.Add('-arg2'); //
prc.Parameters.Add('-arg3'); //
end; //
////////////////////////////////////////////////////////////////////////////////
procedure mainform.PrcExe();
////////////////////////////////////////////////////////////////////////////////
var //
buff : string = ''; //
cnt : LongInt = 0; //
i : integer; //
//
begin //
//
try //
prc.Execute; //
//
repeat //
try //
SetLength(buff, BUF_SIZE); //
cnt := prc.Output.Read(buff[1],Length(buff)); //
if cnt > 0 then //
begin //
SetLength(buff,cnt); // не есть гуд
<работа с буффером buff> //
end //
finally //
(...) //
end; //
//
Application.ProcessMessages; //
until cnt = 0; //
//
except //
(...) //
end; //
//
prc.Active := false; //
prc.Parameters.Clear; //
end; //
////////////////////////////////////////////////////////////////////////////////
procedure mainform.PrcKill();
////////////////////////////////////////////////////////////////////////////////
begin //
// //
// всевозможные варианты данных команд //
// //
prc.Terminate(0); // SIGTERM //
prc.Active := False; // //
fpKill(prc.ProcessID, SIGKILL); // SIGKILL (9) //
end; //
////////////////////////////////////////////////////////////////////////////////
PrcPrep(); // вызов из одного обработчика
PrcExe (); //
...
PrcKill(); // вызов из другого обработчика
////////////////////////////////////////////////////////////////////////////////
