Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.07.2012, 05:19   #1
-Jack-
Форумчанин
 
Регистрация: 19.04.2009
Сообщений: 368
По умолчанию последовательное выполнение delphi7

Всем доброго времени суток. Столкнулся с такой задачкой. Если последовательность команд

Код:
CreateMyFile('file.exe');
ShellExecute(Handle, nil,PAnsiChar('file.exe'), nil, nil, SW_SHOW);
Но за счёт того, что CreateMyFile достаточно долго выполняется и не успевает создать file.exe в тот момент, когда ShellExecute уже пытается его запустить, и в итоге выдаёт ошибку.

Как можно реализовать так скажем последовательное выполнение задач ( сначала создаем файл, потом его запускаем ) ?
-Jack- вне форума Ответить с цитированием
Старый 02.07.2012, 05:32   #2
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

вообще то выполнение строго последовательное, если сами не создаете левых потоков.
так что показывайте весь код.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 02.07.2012, 05:34   #3
QunneD
C++ & PHP & Asm
Форумчанин
 
Аватар для QunneD
 
Регистрация: 06.12.2008
Сообщений: 300
По умолчанию

WaitForSingleObject , не?

Еще цикл как вариант, или же создание отдельного потока.

Можно способом возврата, если функция возвращает какой-либо результат, к примеру:

if (CreateMyFile('file.exe') = true) then
begin
// Следующий этап.
end;

Вообщем возможностей много.
QunneD вне форума Ответить с цитированием
Старый 02.07.2012, 08:29   #4
-Jack-
Форумчанин
 
Регистрация: 19.04.2009
Сообщений: 368
По умолчанию

Код:
procedure TFrame2.CreateMyFile(const ASource, ADest: TFileName);
var
  Source, Dest: TStream;
begin
  Source := TFileStream.Create(ASource, fmOpenRead + fmShareDenyWrite);
  try
    Dest := TFileStream.Create(ADest, fmCreate);
    try
      CreateMyFileStream(Source, Dest);
    finally
      Dest.Free;
    end;
  finally
    Source.Free;
    DeleteFile(ASource);
  end;
end;
-Jack- вне форума Ответить с цитированием
Старый 02.07.2012, 09:06   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Код:
procedure TFrame2.CreateMyFile(const ASource, ADest: TFileName);
у метода ДВА параметра. А Вы нам показываете в примере ОДИН.
что-то тут не сходится.
Это раз.

во-вторых, Вы используете CreateMyFileStream - что там делается - не видно.

в-третьих, try вы написали, а вот Except - не используете.
строчка DeleteFile(ASource) удалит файл в любом случае, даже если возникнут ошибки при создании Dest.

в-чётвёртых, полностью согласен с предыдущими ораторами. Команды в Delphi выполняются СТРОГО последовательно!
Думаю, что у Вас ОС держит файл долго. В этом случае крутите перед ShellExecute дополнительный цикл, в котором проверяйте, что файл есть, он нужного размера и/или свободен для чтения...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 02.07.2012, 10:04   #6
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,543
По умолчанию

разные пути
CreateFile - текущая директория
shellExecute - стандартный контекст (\system32)

Использовать полный путь.
Код:
f:=ExtractFilePath(application.exename) +'file.xxx';
CreateFile( f );
shellExecute(..., PAnsichar(f),....);
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 02.07.2012, 18:57   #7
-Jack-
Форумчанин
 
Регистрация: 19.04.2009
Сообщений: 368
По умолчанию

Кажется понял в чём загвоздка, народ, можете подсказать
Код:
for I:=1 to A1 do 
begin
...
end;
Как по середине цикла осуществить остановку выполнения цикла и вернуться к началу цикла и приступить к следующему I ?

Последний раз редактировалось -Jack-; 02.07.2012 в 18:59.
-Jack- вне форума Ответить с цитированием
Старый 02.07.2012, 19:07   #8
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Continue ;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 02.07.2012, 19:13   #9
-Jack-
Форумчанин
 
Регистрация: 19.04.2009
Сообщений: 368
По умолчанию

Спасибо, а то пробовал break, но он вообще выходит из цикла
-Jack- вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Последовательное переключение radiobutton Liserk Помощь студентам 6 01.04.2012 00:11
Последовательное выполнение запросов artemavd БД в Delphi 15 11.10.2010 15:51
Последовательное чтение записей artemavd БД в Delphi 32 09.09.2009 20:14
последовательное выполнение процедур в макросе iamaxl Microsoft Office Excel 4 07.07.2009 16:23
Последовательное копирование непустых строк.. Judge52 Microsoft Office Excel 2 13.03.2009 08:23