Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
2-1216724523
Dimich1978
2008-07-22 15:02
2008.08.24
Замена, распечатка в Richedit


15-1215158807
Вопросик
2008-07-04 12:06
2008.08.24
напоминание пароля


2-1216662345
maksum
2008-07-21 21:45
2008.08.24
TreeNode


2-1216556223
MixPix
2008-07-20 16:17
2008.08.24
вставить TTreeNode в дерево


2-1216289835
NJ
2008-07-17 14:17
2008.08.24
DLL





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский