Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.01.16;
Скачать: CL | DM;

Вниз

Пока выполняется процесс.   Найти похожие ветки 

 
Wood   (2004-12-29 04:41) [0]

С наступающим всех!
Помогите с таким вопросом:
Из моей программы вызывается сторонняя программа,
например, архиватор, т.е. программа, выполняющая
длительный процесс. Нужно, пока выполняется процесс,
что бы кнопка в моей проге, которая открыла стороннюю
программу, была временно не активна, пока не закончится
процесс. Каким образом это реализуется? Примерчик, плз.
или дельный совет.
Спасибо.


 
snake_r   (2004-12-29 09:16) [1]

Button1.Enabled:=False;
а когда твой процесс завершится то
Button1.Enabled:=true;


 
Digitman ©   (2004-12-29 09:37) [2]


> вызывается сторонняя программа


читай - стартует процесс

каждый процесс имеет глобально уникальный ProcessId и локально уникальный ProcessHandle, которые ты получаешь в результате успешного вызова CreateProcess

ProcessHandle - хэндл открытого процесса - является объектом интерпроцессной синхронизации и допустим в кач-ве параметра в вызовах различных ф-ций синхронизации, таких как WaitForSingleObject[Ex], [Msg]WaitForMulipleObjects[Ex]

любая из этих ф-ций, получив соответствующим параметром этот ProcessHandle, будет "ждать" указанное тобой время факта завершения стартованного тобой процесса, при этом возврат ф-цией значения WAIT_OBJECT_0 как раз и констатирует этот факт .. кр.того, [Msg]WaitFor-ф-ции позволяют в период ожидания реагировать на факты наличия win-сообщений в очереди текущего (т.е. вызывающего эти ф-ции) кодового потока, что дает возможность не "замораживать" пользовательский интерфейс в период ожидания

по факту завершения процесса с целью освобождения занятых ресурсов следует закрыть хэндл ProcessHandle, а также ThreadHandle, полученный при вызове CreateProcess, вызовами CloseHandle()


 
Wood   (2004-12-29 16:57) [3]

>>Digitman[2]
Спасибо. Может разберусь.


 
Wood   (2005-01-03 14:48) [4]

С Новым годом!
Ну, хорошо. Ни черта я не разобрался и не понял, т.к. с WinApi`шными функциями сталкивался крайне редко,я почти начинающий. Процесс (стороннюю программу) вызываю из ActionList (FileRun).  Может быть, мне помог какой-нибудь пример.
>>snake_r[1]
Вы правы, как задал вопрос, так и ответили.
Но все же, это наверное очень серьезная тема? Был бы благодарен любой, более подробной помощи на эту тему.
Спасибо.


 
Wood   (2005-01-03 15:37) [5]

Граждане! Помогите кто чем может!
Сами мы не местные... :)
Как начать и углубить от CreateProcess и далее? С чем это едят?


 
MBo ©   (2005-01-03 15:40) [6]

http://www.delphimaster.ru/cgi-bin/faq.pl?look=1&id=988621841&n=15


 
TUser ©   (2005-01-03 15:45) [7]


> я почти начинающий.

Т.е. почти уже начал программировать? Я бы сделал такой поток

type TMine = class(TThread)
private
FBool: boolean;
procedure Go;
public
procedure Execute; override;
end;

procedure TMine.Go;
begin
Form1.Button1.Enabled:=FBool;
end;

procedure TMine.Execute;
var pi: _Process_information;
   si: _security_information;
begin
FBool:=false;
Synchronize(Go);
{Подготовить pi и si и передать из функции CreateProcess}
WaitForSingleObject(pi.hProcessID);
FBool:=true;
Synchronize(Go);
end;


 
Erik1 ©   (2005-01-03 15:59) [8]

А я бы без дополнительного потока обошолся(может быть), MsgWaitForMultipleObjects(1, Handle, False, INFINITE, QS_ALLINPUT) поможет. Тлько надо незабыть обработать очередь сообщений.


 
kaZaNoVa ©   (2005-01-03 16:43) [9]

Erik1 ©   (03.01.05 15:59) [8]
а я всегда поток завожу - имхо проще и глюков не будет))


 
Fay ©   (2005-01-03 17:20) [10]

2 MBo ©   (03.01.05 15:40) [6]
В приведённом примере есть некая переменная cmdline:string; используемая как PChar(cmdline),  // Command line..
Это не есть гуд, т.к. память по этому указателю должна быть доступна на запись, а в данном примере, IMHO, не это гарантируется.


 
Fay ©   (2005-01-03 17:21) [11]


> не это гарантируется.

В смысле "это не гарантируется". 8)


 
Wood   (2005-01-03 17:38) [12]

Спасибо за отзывчивость!
Вторая попытка разобраться. Если не получится, придется с этим (приемом) завязать


 
GanibalLector ©   (2005-01-03 17:41) [13]

>Вторая попытка разобраться. Если не получится, придется с этим (приемом) завязать

Ты [6] смотрел???Какая еще попытка???


 
Wood   (2005-01-03 19:05) [14]

GanibalLector ©[13]
Смотрел.
Учитывая, что я вообще в первый раз пытаюсь понять данную тему, считаю, что это "попытка". Ведь хотелось бы не только тупо применить пример, но и понять ЧТО я делаю.


 
GanibalLector ©   (2005-01-03 19:11) [15]

>Ведь хотелось бы не только тупо применить пример, но и понять ЧТО я делаю
Тогда открой Рихтера...там все на русском :)


 
Wood   (2005-01-04 04:39) [16]

> GanibalLector © [15]
Причем тут на русском? Где ж его взять, Рихтера? Все, что я смог достать из печатной литеры по Delphi - это "Делфи для чайников"


 
Fay ©   (2005-01-04 07:06) [17]

http://www.podgoretsky.com/pascal.html


 
Fay ©   (2005-01-04 07:09) [18]

Но тов. Рихтера там нет  8)


 
Wood   (2005-01-04 07:36) [19]

>Fay ©
Спасибо за ссылку



Страницы: 1 вся ветка

Текущий архив: 2005.01.16;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.044 c
14-1103875670
ALexA
2004-12-24 11:07
2005.01.16
окраска DbMemo1


14-1103831111
Grinders
2004-12-23 22:45
2005.01.16
Yahoo


1-1104335957
Тимур
2004-12-29 18:59
2005.01.16
Проблема с Dll


1-1104161942
Sashok
2004-12-27 18:39
2005.01.16
Помогите пожалуйста!


1-1104175889
NeedHelp
2004-12-27 22:31
2005.01.16
Vopros lenjaja =)) o funkcie try .... except