Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.01.16;
Скачать: [xml.tar.bz2];

Вниз

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

 
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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.038 c
14-1104181424
Кудесник
2004-12-28 00:03
2005.01.16
Ура!!! Я на GPRS!!!


1-1103616175
kull
2004-12-21 11:02
2005.01.16
Существует ли проблемма?


3-1103092335
dolmat
2004-12-15 09:32
2005.01.16
SQL по двум базам


14-1103972302
начинающий_
2004-12-25 13:58
2005.01.16
Сетевые приложения


6-1098852987
Kniaz
2004-10-27 08:56
2005.01.16
Системное время на удаленной машине?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский