![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Я наверное тормоз. Ничего догнать не могу. [D6, D7, Win2k, WinXP]
DuhcmanSoft © (2004-02-26 10:42:00)Взял пример с FAQ вставил его в функцию работает отменно, но получается не все так как хотел бы я, запуск с ожиданием и мертвым висением моей проги.
function WinExecAndWait( Exec: PChar; cmdline: PChar; Patch: PChar): Word;
var si : STARTUPINFO;
pi : PROCESS_INFORMATION;
begin
ZeroMemory(@si,sizeof(si));
si.cb:=SizeOf(si);
if not CreateProcess( Exec, // No module name (use command line).
cmdline, // Command line.
nil, // Process handle not inheritable.
nil, // Thread handle not inheritable.
False, // Set handle inheritance to FALSE.
0, // No creation flags.
nil, // Use parent's environment block.
Patch, // Use parent's starting directory.
si, // Pointer to STARTUPINFO structure.
pi ) // Pointer to PROCESS_INFORMATION structure.
then
begin
ShowMessage('Запуск приложения не возможен!');
Exit;
end;
WaitForSingleObject(pi.hProcess, INFINITE);
CloseHandle( pi.hProcess );
CloseHandle( pi.hThread );
end;
Мне подсказывают вместо
WaitForSingleObject(pi.hProcess, INFINITE); использовать
MsgWaitForMultipleObjects(pi.hProcess, ..., false, INFINITE, nil);
но я не могу догнать все его параметры особенно ...
Весь вечер пытался что ли бо подобрать не выходит.
Помогите написать функцию для запуска с ожиданием и возможностью работы в программе из которой производится запуск.
Cobalt (2004-02-26 12:08:00) [1]Да, извиняюсь, невнимательно читал сообщение.
В FAQ надо добавить - что, мол, этот вариант блокирует вашу прогу. А этот вариант - нет.
Polevi (2004-02-26 11:49:00) [2]не ветка а цирк какойто
DuhcmanSoft (2004-02-26 11:48:00) [3]Cobalt © (26.02.04 11:46) [12]
Чё-то не пойму, в чём именно проблема?
Ты функцию вызываешь?
Прога запускается?
Пока она работает, твоя прога висит. Всё верно.
Как только она завершится, твоя прога получит управление.
А если нужно что бы было управление до завершения и програ показывала что запущенная прога работает или нет
Polevi (2004-02-26 11:48:00) [4]я так понял он хочет получать уведомление о завершении работы запущенного им процесса, не останавливая при этом работы основной программы
DuhcmanSoft (2004-02-26 11:46:00) [5]type
TMyThread = class(TThread)
protected
procedure Execute; override;
end;
procedure TMyThread.Execute;
begin
WinExecAndWait(EXE_, ParamEXE_,Path_);
end;
Cobalt (2004-02-26 11:46:00) [6]Чё-то не пойму, в чём именнопроблема?
Ты функцию вызываешь?
Прога запускается?
Пока она работает, твоя прога висит. Всё верно.
Как только она завершится, твоя прога получит управление.
Polevi (2004-02-26 11:45:00) [7]млин..
type
TMyThread=class(TThread)
public
procedure Execute;override;
end;
{ TMyThread }
procedure TMyThread.Execute;
begin
WinExecAndWait(...);
end;
DuhcmanSoft (2004-02-26 11:42:00) [8]Всей проги ?
Polevi (2004-02-26 11:41:00) [9]код свой целиком приведи
DuhcmanSoft (2004-02-26 11:41:00) [10]Polevi © (26.02.04 11:40) [6]
type
TMyThread=class(TThread)
public
procedure Execute;override;
end;
всё равно ругается
DuhcmanSoft (2004-02-26 11:40:00) [11]TMyThread = class(TThread);
Polevi (2004-02-26 11:40:00) [12]type
TMyThread=class(TThread)
public
procedure Execute;override;
end;
Polevi (2004-02-26 11:39:00) [13]а какой у тебя базовый класс
DuhcmanSoft (2004-02-26 11:31:00) [14]Polevi © (26.02.04 11:30) [3]
см TThread
Ругется на procedure Execute; override; типа метод не найден в базе класса
Polevi (2004-02-26 11:30:00) [15]см TThread
DuhcmanSoft (2004-02-26 10:51:00) [16]Рамиль © (26.02.04 10:48) [1]
Так и должно быть, WaitForSingleObject ждет завершения процесса. Надо запускать процесс в отдельном потоке.
Скажи как только желательно с примером
Рамиль (2004-02-26 10:48:00) [17]Так и должно быть, WaitForSingleObject ждет завершения процесса. Надо запускать процесс в отдельном потоке.