Форум: "Начинающим";
Текущий архив: 2008.08.24;
Скачать: [xml.tar.bz2];
ВнизКак притормозить выполнение след. оператора Найти похожие ветки
← →
programmer90 (2008-07-18 13:10) [0]Всем привет. Нужна помощь: как приостановить выполнение одного оператора на некоторое время. Пример: имеется такой код-
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-е , то я буду только рад...
Благодарю-с.
← →
Dennis I. Komarov © (2008-07-18 13:11) [1]Sleep?
← →
Palladin © (2008-07-18 13:12) [2]
> programmer90 (18.07.08 13:10)
CreateProcess
WaitForSingleObject
← →
Vlad Oshin © (2008-07-18 13:13) [3]WaitForSingleObject
← →
Ega23 © (2008-07-18 13:14) [4]
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;
← →
programmer90 (2008-07-18 14:50) [5]на счет [4],этот код уверенно захлебнулсо уже ShellInfo.lpFile := PChar(ExeName);-тут, в D2007 .NET- PChar - не хочет работать...
> Sleep?
это конечно хорошо, поставил 2 сек в 90% будет работать ,кто знает может для компиляции потребуется больше чем 2 сек? поэтому надо бы ещё лучше- как уловить окончание компиляции.
Могут ли
> CreateProcess,WaitForSingleObject
помочь в этом вопросе?
Спасибо всем.
← →
Dennis I. Komarov © (2008-07-18 14:53) [6]> это конечно хорошо, поставил 2 сек в 90% будет работать
> ,кто знает может для компиляции потребуется больше чем 2
> сек? поэтому надо бы ещё лучше- как уловить окончание
> компиляции.
"Ты кам того хотел..." (С) :)
> Какой оператор нужно вставить вместо комментариев чтобы
> на 2-3 сек програмка "отдохнула".
← →
Плохиш © (2008-07-18 14:57) [7]
> programmer90 (18.07.08 14:50) [5]
> на счет [4],этот код уверенно захлебнулсо уже ShellInfo.
> lpFile := PChar(ExeName);-тут, в D2007 .NET- PChar - не
> хочет работать
T.e. копи/паст не получился... но это уже чисто твои проблемы, не правда ли?
← →
Правильный$Вася (2008-07-18 15:02) [8]
> в D2007 .NET- PChar - не хочет работать.
то у тебя для вин32, то для нет
ты определись, а?
> как уловить окончание компиляции.Могут ли> CreateProcess,
> WaitForSingleObject помочь в этом вопросе?
именно для этого тебе их и привели
почитал бы справку, что ли
← →
Игорь Шевченко © (2008-07-18 15:07) [9]
> Какой оператор нужно вставить вместо комментариев чтобы
> на 2-3 сек програмка "отдохнула
запускать один батник - оно само ждать будет
← →
Jeer © (2008-07-18 15:08) [10]Написать элементарный 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.
Вроде бы. :)
← →
programmer90 (2008-07-18 21:23) [11]
> то у тебя для вин32, то для нетты определись, а?
У меня всё таки дот нет, иначе никаких трабл не было бы...
> > это конечно хорошо, поставил 2 сек в 90% будет работать
> > ,кто знает может для компиляции потребуется больше чем
> 2 > сек? поэтому надо бы ещё лучше- как уловить окончание
> > компиляции."Ты кам того хотел..." (С) :)
Я ещё другое хотел ... Если вы предложите другой выход из ситуации, то есть каким-либо образом узнать когда закончится процесс компиляции исходного файла во Free Pascal-е , то я буду только рад...
> > как уловить окончание компиляции.Могут ли> CreateProcess,
> > WaitForSingleObject помочь в этом вопросе?именно для этого
> тебе их и привелипочитал бы справку, что ли
Понял, почитаю...
> запускать один батник - оно само ждать будет,Jeer © (18.07.08 15:08) [10]
Как я сразу не догадался...
Ну вроде пока всё, благодарю-с за помощь.
← →
programmer90 (2008-07-20 21:44) [12]Кстати [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);
Работает как надо. Это так на всякий случай...
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2008.08.24;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.041 c