Форум: "Основная";
Текущий архив: 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.047 c