Задержка выполнения программы.[Delphi]

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by ZnikiR, 22 May 2010.

  1. ZnikiR

    ZnikiR Member

    Joined:
    14 Jan 2009
    Messages:
    117
    Likes Received:
    21
    Reputations:
    -5
    Есть программа,первая часть выполняется сразу.
    Хочу сделать,чтобы вторая часть программы выполнялась через 5 минут после запуска программы.
    Можно ли это реализовать?
     
  2. [ac1D]

    [ac1D] Banned

    Joined:
    6 Dec 2009
    Messages:
    44
    Likes Received:
    27
    Reputations:
    0
    Sleep();
     
  3. AlexTheC0d3r

    AlexTheC0d3r Elder - Старейшина

    Joined:
    25 Jul 2008
    Messages:
    388
    Likes Received:
    179
    Reputations:
    18
    Создать дополнительный поток при старте, и в нем с самого начала Sleep(5*60*1000);
    :)

    гугли CreateThread();
     
    2 people like this.
  4. h(f)ucker

    h(f)ucker Member

    Joined:
    11 Jul 2009
    Messages:
    81
    Likes Received:
    84
    Reputations:
    32
    компонент Timer чем не вариант? (ну или для второй части можно задать какое-либо(любое) условие для выполнения)
    P.s. при sleep программа "подвисает"
     
  5. [ac1D]

    [ac1D] Banned

    Joined:
    6 Dec 2009
    Messages:
    44
    Likes Received:
    27
    Reputations:
    0
    Code:
    TNewThread = class(TThread)
      private
        { Private declarations }
      protected
        procedure Execute; override;
      end;
    
    var
      Form1: TForm1;
    
    implementation
    
    {$R *.dfm}
    
    procedure TNewThread.Execute;
    begin
      Sleep(5000);
    end;
    
    procedure TForm1.btn1Click(Sender: TObject);
    var
      NewThread: TNewThread;
    begin
      NewThread:=TNewThread.Create(true);
      NewThread.FreeOnTerminate:=true;
      NewThread.Priority:=tpLower;
      NewThread.Resume;
    end;
    
     
  6. AlexTheC0d3r

    AlexTheC0d3r Elder - Старейшина

    Joined:
    25 Jul 2008
    Messages:
    388
    Likes Received:
    179
    Reputations:
    18
    при Sleep() она замораживается...
    Есть аналог в виде Delay (http://www.delphisources.ru/pages/faq/base/delay_func.html), но я не рекомендую его использовать
     
  7. AlexTheC0d3r

    AlexTheC0d3r Elder - Старейшина

    Joined:
    25 Jul 2008
    Messages:
    388
    Likes Received:
    179
    Reputations:
    18

    Советую перейти от такого создания потоков к CreateThread()... в данном случае код получится намного компактнее и эффективнее
     
  8. ZnikiR

    ZnikiR Member

    Joined:
    14 Jan 2009
    Messages:
    117
    Likes Received:
    21
    Reputations:
    -5
    Так сейчас пробывал,ничего не получилось.
    Можешь показать как сделать комактнее?
     
  9. miako

    miako Member

    Joined:
    20 Jan 2010
    Messages:
    154
    Likes Received:
    13
    Reputations:
    5
    Скинь код, посмотрим что там не получилось. Сдесь не экстрасенсы:)
     
  10. Meecript_

    Meecript_ Banned

    Joined:
    29 Oct 2008
    Messages:
    194
    Likes Received:
    62
    Reputations:
    32
    Чем эффективнее?
     
  11. heretic1990

    heretic1990 Elder - Старейшина

    Joined:
    2 Jul 2008
    Messages:
    487
    Likes Received:
    182
    Reputations:
    5
    Code:
    procedure TForm1.Timer1Timer(Sender: TObject);
    begin
    первая часть программы :=false:
    
    Timer2.Enabled:= True;
    end;
    
    procedure TForm1.Timer2Timer(Sender: TObject);
    begin
    
    вторая часть программы :=true:
    Timer1.Enabled:= false;
    Timer2.Enabled:= false;
    end;
    останется только настроить интервал для таймера
     
  12. Ildon

    Ildon Member

    Joined:
    13 Apr 2010
    Messages:
    43
    Likes Received:
    11
    Reputations:
    -10
    А вот те слип при котором не бует зависонов )

    Code:
    int time=GetTickCount();
    while((GetTickCount()-time)<1000))//Или меняй задержку на свою
              {
              Application->ProcessMessages();
              }
    
     
  13. Faost

    Faost New Member

    Joined:
    11 Jul 2009
    Messages:
    18
    Likes Received:
    3
    Reputations:
    0
    function proc(): integer;
    begin
    Sleep(Твое время задержки);
    //Твои действия "второй части" (потока).
    result:= 0;
    end;

    var id: DWORD;
    begin
    CreateThread(nil, 0, @proc, nil, 0, id);
    //Твои действия "первой части" (потока);
    //Если эта часть кода может выполниться за время (или раньше), которое ты поставил в Sleep выше, то раскоменировать след.строку и возложить завершение проги на второй поток (функцию proc).
    //Sleep(infinite);
    end.

    Вариант 2:

    function proc(): integer;
    begin
    Sleep(Твое время задержки);
    //Твои действия "второй части" (потока).
    result:= 0;
    end;

    var id: DWORD;
    h: THandle;
    begin
    h:= CreateThread(nil, 0, @proc, nil, 0, id);
    //Твои действия "первой части" (потока);
    WaitForSingleObject(h, infinite); //ждем завершения созданного потока.
    end.
     
    #13 Faost, 24 May 2010
    Last edited: 24 May 2010
  14. AlexTheC0d3r

    AlexTheC0d3r Elder - Старейшина

    Joined:
    25 Jul 2008
    Messages:
    388
    Likes Received:
    179
    Reputations:
    18
    ппц... вы тут такие вещи творите....

    Ildon, Нельзя на это полагаться, еще раз повторяю
     
  15. Ildon

    Ildon Member

    Joined:
    13 Apr 2010
    Messages:
    43
    Likes Received:
    11
    Reputations:
    -10

    Скоко раз так делал все нормально было
     
  16. Faost

    Faost New Member

    Joined:
    11 Jul 2009
    Messages:
    18
    Likes Received:
    3
    Reputations:
    0
    1. Скажи, что плохого в этих "вещах" и приведи пример.
    2. Предложи лучший вариант.
    3. Без выполнения пунктов 1 и 2 не нужно говорить того, что ты говоришь, ибо это тебя не красит как человека, разбирающегося в этих "вещах".
     
  17. AlexTheC0d3r

    AlexTheC0d3r Elder - Старейшина

    Joined:
    25 Jul 2008
    Messages:
    388
    Likes Received:
    179
    Reputations:
    18
    Во-первых, в функции потока необходимо
    Во-вторых, и чтобы не было этого бредового
    , есть специальная функция
    Если ты так делал, и было нормально, это совсем не означает что это правильно!
    Еще раз повторяю, нет гарантии, что
    будет выполняться определенное время/


    Надеюсь теперь понятно.

    UPD:
    где? Иначе программа никогда не завершится
     
    #17 AlexTheC0d3r, 24 May 2010
    Last edited: 24 May 2010
  18. Faost

    Faost New Member

    Joined:
    11 Jul 2009
    Messages:
    18
    Likes Received:
    3
    Reputations:
    0
    AlexTheC0d3r,
    Далее.
    Я не вижу от тебя примера, где бы return (result) давал сбой, да и в msdn ясно написано, что return вполне подходит для выхода из потока. WTF?
    смотри в моем посте вариант 2 (дописал ранее твоего поста). Однако и тут я не вижу от тебя примера, которым бы ты показал, что Sleep(infinite) - бредовый.
    дружище, посмотри на тему, там присутствует слово Delphi. Borland`овские кодеры взяли этот вопрос на себя.
    Прошу еще раз обратить внимание на 3ий пункт моего пред.поста.
     
    #18 Faost, 24 May 2010
    Last edited: 24 May 2010
Loading...
Similar Threads - Задержка выполнения программы
  1. Peja
    Replies:
    0
    Views:
    2,541