Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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


Ответ
 
Опции темы
Старый 23.12.2017, 16:40   #1
Shouldercannon
Профессионал
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Адрес: Пенза
Сообщений: 1,767
Репутация: 226

icq: 473732523
Вопрос Остановить процесс созданный 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, 17:10   #2
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 12,253
Репутация: 2054

icq: 216409213
По умолчанию

Стандартно заводить флаг и проверять его в потоке/слать потоку сообщение.
__________________
Запомните раз и навсегда: помочь != "решите за меня"!
p51x на форуме   Ответить с цитированием
Старый 23.12.2017, 18:05   #3
Shouldercannon
Профессионал
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Адрес: Пенза
Сообщений: 1,767
Репутация: 226

icq: 473732523
По умолчанию

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

icq: 216409213
По умолчанию

Где? Как остановленный поток среагирует на флаг или сообщение? Как он созданный процесс убьет?
__________________
Запомните раз и навсегда: помочь != "решите за меня"!
p51x на форуме   Ответить с цитированием
Старый 23.12.2017, 20:22   #5
Shouldercannon
Профессионал
 
Аватар для Shouldercannon
 
Регистрация: 26.01.2008
Адрес: Пенза
Сообщений: 1,767
Репутация: 226

icq: 473732523
По умолчанию

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

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как убить неубиваемый процесс в Delphi? по pid или совсем уничтожить файл или процесс justprogrammer Общие вопросы Delphi 2 14.08.2016 12: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 11:40
Остановить процесс Shurik Hacker Win Api 4 20.07.2007 08:05


14:23.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru