![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как притормозить выполнение след. оператора [D7, XP]
programmer90 © (2008-07-18 13:10:00)Всем привет. Нужна помощь: как приостановить выполнение одного оператора на некоторое время. Пример: имеется такой код-
ShellExecute(handle,'open','c:\fpc\2.2.0\bin\i386-win32\fpc','d:\doc.pas',nil,SW_hide);
//Здесь нужно приостановить выполнение на 2-3 секунды.
ShellExecute(handle,'open','cmd',' /c d:\doc.exe && pause',nil,1);
Какой оператор нужно вставить вместо комментариев чтобы на 2-3 сек програмка "отдохнула".Наверно вы сами по коду догадались для чего это нужно,а если не догадались то скажу: это нужно чтобы успеть скомпилировать исходный файл.Если вы предложите другой выход из ситуации, то есть каким-либо образом узнать когда закончится процесс компиляции исходного файла во Free Pascal-е , то я буду только рад...
Благодарю-с.
programmer90 (2008-07-20 21:44:00) [1]Кстати [9],[10] можно вообще без бантиков:) ,но с галстуком примерно так:
ShellExecute(handle,'open','cmd',' /c c:\fpc\2.2.0\bin\i386-win32\fpc d:\file.pas > d:\file.err && cls && d:\file.exe > d:\file.run && pause',nil,SW_Show);Работает как надо. Это так на всякий случай...
programmer90 (2008-07-18 21:23:00) [2]
> то у тебя для вин32, то для нетты определись, а?
У меня всё таки дот нет, иначе никаких трабл не было бы...
> > это конечно хорошо, поставил 2 сек в 90% будет работать
> > ,кто знает может для компиляции потребуется больше чем
> 2 > сек? поэтому надо бы ещё лучше- как уловить окончание
> > компиляции."Ты кам того хотел..." (С) :)
Я ещё другое хотел ... Если вы предложите другой выход из ситуации, то есть каким-либо образом узнать когда закончится процесс компиляции исходного файла во Free Pascal-е , то я буду только рад...
> > как уловить окончание компиляции.Могут ли> CreateProcess,
> > WaitForSingleObject помочь в этом вопросе?именно для этого
> тебе их и привелипочитал бы справку, что ли
Понял, почитаю...
> запускать один батник - оно само ждать будет,Jeer © (18.07.08 15:08) [10]
Как я сразу не догадался...
Ну вроде пока всё, благодарю-с за помощь.
Jeer (2008-07-18 15:08:00) [3]Написать элементарный DOS-пакетник с оператороми call, вызывающими вторичные пакетники с необходимыми действиями.
Последовательность завершения текущего пакетника до вызова следующего гарантирована средствами ОС:
my.bat:
call a.bat
call b.bat
...
А вот вызов my.bat ( my.cmd) - через ShellExecute или аналог.
P.S.
Вместо call x.bat
можно
command /c x.bat
P.P.S.
Вроде бы. :)
Игорь Шевченко (2008-07-18 15:07:00) [4]
> Какой оператор нужно вставить вместо комментариев чтобы
> на 2-3 сек програмка "отдохнула
запускать один батник - оно само ждать будет
Правильный$Вася (2008-07-18 15:02:00) [5]
> в D2007 .NET- PChar - не хочет работать.
то у тебя для вин32, то для нет
ты определись, а?
> как уловить окончание компиляции.Могут ли> CreateProcess,
> WaitForSingleObject помочь в этом вопросе?
именно для этого тебе их и привели
почитал бы справку, что ли
Плохиш (2008-07-18 14:57:00) [6]
> programmer90 (18.07.08 14:50) [5]
> на счет [4],этот код уверенно захлебнулсо уже ShellInfo.
> lpFile := PChar(ExeName);-тут, в D2007 .NET- PChar - не
> хочет работать
T.e. копи/паст не получился... но это уже чисто твои проблемы, не правда ли?
Dennis I. Komarov (2008-07-18 14:53:00) [7]> это конечно хорошо, поставил 2 сек в 90% будет работать
> ,кто знает может для компиляции потребуется больше чем 2
> сек? поэтому надо бы ещё лучше- как уловить окончание
> компиляции.
"Ты кам того хотел..." (С) :)
> Какой оператор нужно вставить вместо комментариев чтобы
> на 2-3 сек програмка "отдохнула".
programmer90 (2008-07-18 14:50:00) [8]на счет [4],этот код уверенно захлебнулсо уже ShellInfo.lpFile := PChar(ExeName);-тут, в D2007 .NET- PChar - не хочет работать...
> Sleep?
это конечно хорошо, поставил 2 сек в 90% будет работать ,кто знает может для компиляции потребуется больше чем 2 сек? поэтому надо бы ещё лучше- как уловить окончание компиляции.
Могут ли
> CreateProcess,WaitForSingleObject
помочь в этом вопросе?
Спасибо всем.
Ega23 (2008-07-18 13:14:00) [9]
function RunAndWait (const ExeName, ParamString: string;
QuoteParams: Boolean = true): Integer;
// (c) by Игорь Шевченко
var
ShellInfo: TShellExecuteInfo;
ExitCode: DWORD;
begin
ShellInfo.cbSize := SizeOf(ShellInfo);
ShellInfo.fMask := SEE_MASK_NOCLOSEPROCESS;
ShellInfo.Wnd := HWND_DESKTOP;
ShellInfo.lpVerb := 'open';
ShellInfo.lpFile := PChar(ExeName);
if QuoteParams then
ShellInfo.lpParameters := PChar('"'+ParamString+'"')
else
ShellInfo.lpParameters := PChar(ParamString);
ShellInfo.lpDirectory := PChar(ExtractFilePath(ExeName));
ShellInfo.nShow := SW_HIDE;
if not ShellExecuteEx(@ShellInfo) then
RaiseLastOSError;
if ShellInfo.hProcess <> 0 then
try
WaitForSingleObjectEx(ShellInfo.hProcess, INFINITE, false);
GetExitCodeProcess(ShellInfo.hProcess, ExitCode);
Result := ExitCode;
finally
CloseHandle(ShellInfo.hProcess);
end
else
Result := -1;
end;
Vlad Oshin (2008-07-18 13:13:00) [10]WaitForSingleObject
Palladin (2008-07-18 13:12:00) [11]
> programmer90 (18.07.08 13:10)
CreateProcess
WaitForSingleObject
Dennis I. Komarov (2008-07-18 13:11:00) [12]Sleep?