Форум: "Основная";
Текущий архив: 2002.10.31;
Скачать: [xml.tar.bz2];
ВнизЗапуск и завершение программы принудительно. Найти похожие ветки
← →
()utLaw (2002-10-20 00:00) [0]Собственно, надо реализовать сабж. Т.е. запустить прогу и, если она за нужное ремя не завершилась, то скинуть ее.
Плз, пишите мне на мыло.
← →
Rouse_ (2002-10-20 00:05) [1]Ну посмотри ты в FAQ, там все по полочкам разложено
Желаю успехов
← →
Aleks1 (2002-10-20 04:11) [2]Честно говоря общий ответ на сабж, действительно есть в FAQ причем не один раз. Но, имхо, если привести подробности задачи, то ответ может быть гораздо лучше по всем параметрам.
← →
Rouse_ (2002-10-20 05:36) [3]Да не вопрос, ответ то дать можно, но почему бы и не посмотреть в факе?
Вот примерный алгоритм действий
procedure Demo_Start_Kill_Proc;
var
H:HWND;
dwPID: integer;
hProc: THandle;
begin
//Запускаем
h:= ShellExecute(Handle,"open",PChar(Расположение программы),PChar(Параметры),PChar(Рабочая директория),SW_NORMAL);
//Ждем
Sleep(Время ожидания);
//Убиваем программу
if GetWindowThreadProcessId(H, @dwPID)<>0 then
hProc := OpenProcess(PROCESS_ALL_ACCESS, TRUE, dwPID);
if hProc <> 0 then
TerminateProcess(hProc, 0);
end;
Желаю успехов
← →
andrey_pst (2002-10-20 08:27) [4]Разрешите еще вопрос:
TerminateProcess выгружает dll, использующиеся "убиваемой" программой ?
← →
Rouse_ (2002-10-20 09:35) [5]Нет, для этого лучше WM_QUIT
Желаю успехов
← →
()utLaw (2002-10-20 10:51) [6]А если прога запускается ДОСовская?
← →
Rouse_ (2002-10-20 10:55) [7]Тогда первый вариант кода
Желаю успехов
← →
()utLaw (2002-10-21 09:12) [8]Я сделал так:
(************ Server.dpr ************)
program Server;
uses
Forms,
ServerMain in "ServerMain.pas" {ServerForm};
{$R *.RES}
begin
Application.Initialize;
Application.CreateForm(TServerForm, ServerForm);
Application.Run;
end.
(************ ServerMain.pas ************)
unit ServerMain;
interface
uses
// Messages, SysUtils, Graphics, Dialogs, StdCtrls,
Classes, Controls, StdCtrls,
Forms, Windows, ShellAPI;
type
TServerForm = class(TForm)
bRun: TButton;
procedure bRunClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
ServerForm: TServerForm;
implementation
{$R *.DFM}
procedure TServerForm.bRunClick(Sender: TObject);
var
H:HWND;
dwPID: integer;
hProc: THandle;
begin
//Запускаем
h:= ShellExecute(Handle,"open",PChar("d:\Мои документы\Projects\Progs\Tester\TST.exe"),PChar(""{Параметры}),PChar("d:\Мои документы\Projects\Progs\Tester\"{Рабочая директория}),SW_NORMAL);
//Ждем
Sleep(3000{Время ожидания});
//Убиваем программу
if GetWindowThreadProcessId(H, @dwPID)<>0 then
hProc := OpenProcess(PROCESS_ALL_ACCESS, TRUE, dwPID);
if hProc <> 0 then
TerminateProcess(hProc, 0);
end;
end.
(************ TST.PAS ************)
{Компилировано TurboPascal"ем}
begin
readln;
end.
но... Программа TST не завершается.... Что делать?
Программа должна тестировать олимпиадные задачи. Там есть лимит по времени, т.е. по прошествии N секунд задача убивается (если сама не завершилась) и выдается сообщение о непрохождении по времени. Иначе происходит анализ результатов.
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.10.31;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.008 c