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

Вниз

Как притормозить выполнение след. оператора   Найти похожие ветки 

 
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;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.022 c
2-1216649811
Pasha L
2008-07-21 18:16
2008.08.24
Как _добавить_ действия на событие?


15-1215130039
DesWind
2008-07-04 04:07
2008.08.24
Что лучше?


1-1197018990
Rav
2007-12-07 12:16
2008.08.24
Как преобразовать TField.DisplayWidth в ListView.Column[x].Width?


15-1215575271
AEN
2008-07-09 07:47
2008.08.24
Хочу сделать пробный сайт


2-1216221664
MikeZ
2008-07-16 19:21
2008.08.24
Hooks: память не может быть read.