Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.12.2017, 15:40   #1
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,893
Вопрос Остановить процесс созданный CreateProcess

Доброго времени суток!
Запускаю bat-файлы через CreateProcess в потоке
Код:
unit frm_Main;

interface
...
type
  TFormMain = class(TForm)
...
  private
    { Private declarations }
  public
    { Public declarations }
  end;

type
  // Поток для создания процесса
  TBatRunning_Thread = class(TThread)
  private
    { Private declarations }
    sFile: String;
  protected
    procedure Execute; override;
    procedure SyncProc;
  public
  end;

var
  FormMain: TFormMain;
  BatRunning_Thread: TBatRunning_Thread;

implementation

{$R *.dfm}

procedure TFormMain.StartBat(sFile: String);
begin
  BatRunning_Thread := TBatRunning_Thread.Create(True);
  BatRunning_Thread.sFile := sFile;
  BatRunning_Thread.FreeOnTerminate := True;
  BatRunning_Thread.Start;
end;
//-------------------------------Создание процесса------------------------------
procedure TBatRunning_Thread.Execute;
var
  StartupInfo: TStartupInfo;
  ProcessInfo: TProcessInformation;
begin
  FillChar(StartupInfo, SizeOf(StartupInfo), 0);
  FillChar(ProcessInfo, SizeOf(ProcessInfo), 0);
  StartupInfo.cb := SizeOf(StartupInfo);
  StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
  StartupInfo.wShowWindow := SW_SHOWNORMAL;
  if CreateProcess(nil,
                   PChar(sFile),
                   nil,
                   nil,
                   False,
                   CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS,
                   nil,
                   PChar(ExtractFilePath(sFile)),
                   StartupInfo,
                   ProcessInfo) then
  begin
    WaitForSingleObject(ProcessInfo.hProcess, INFINITE); // Ждём завершения процесса
    CloseHandle(ProcessInfo.hThread);
    CloseHandle(ProcessInfo.hProcess);
  end;
  Synchronize(SyncProc);
end;

procedure TBatRunning_Thread.SyncProc;
begin
  //!//
end;
//------------------------------------------------------------------------------
end.
Встал вопрос, как этот CreateProcess созданный в отдельном потоке остановить при нажатии на кнопку.
Shouldercannon вне форума Ответить с цитированием
Старый 23.12.2017, 16:10   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Стандартно заводить флаг и проверять его в потоке/слать потоку сообщение.
p51x вне форума Ответить с цитированием
Старый 23.12.2017, 17:05   #3
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,893
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Стандартно заводить флаг и проверять его в потоке/слать потоку сообщение.
Предлагаете остановить поток?
Shouldercannon вне форума Ответить с цитированием
Старый 23.12.2017, 17:37   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Где? Как остановленный поток среагирует на флаг или сообщение? Как он созданный процесс убьет?
p51x вне форума Ответить с цитированием
Старый 23.12.2017, 19:22   #5
Shouldercannon
Участник клуба Подтвердите свой е-майл
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Сообщений: 1,893
По умолчанию

Естественно никак.
Shouldercannon вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как убить неубиваемый процесс в Delphi? по pid или совсем уничтожить файл или процесс justprogrammer Общие вопросы Delphi 2 14.08.2016 11:15
CreateProcess Yokka Общие вопросы C/C++ 0 03.06.2010 23:46
CreateProcess maziLa Win Api 1 19.05.2010 21:01
Как остановить процесс Volkogriz Общие вопросы Delphi 1 15.01.2009 10:40
Остановить процесс Shurik Hacker Win Api 4 20.07.2007 08:05