Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как притормозить выполнение след. оператора [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?


Наверх

Титульная страница Поиск, карта сайта Написать письмо