Как сделать паузу в цикле?

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Vasa2, 23 Oct 2011.

  1. Vasa2

    Vasa2 Banned

    Joined:
    19 Nov 2010
    Messages:
    41
    Likes Received:
    1
    Reputations:
    -5
    Есть цикл, но чтобы он второй раз повторился нужно ввести капчу, и продолжить цикл дальше, извините, но код программы выложить не могу.
     
  2. mironich:

    mironich: New Member

    Joined:
    7 Oct 2011
    Messages:
    25
    Likes Received:
    2
    Reputations:
    0
    Sleep, SetTimer....
    Хотя второе не совсем из той оперы.
     
  3. Vasa2

    Vasa2 Banned

    Joined:
    19 Nov 2010
    Messages:
    41
    Likes Received:
    1
    Reputations:
    -5
    пишу на делфи, Sleep не подходит, програма вснет
     
  4. mironich:

    mironich: New Member

    Joined:
    7 Oct 2011
    Messages:
    25
    Likes Received:
    2
    Reputations:
    0
    Засунь код в поток/
     
  5. k0tt0d

    k0tt0d Member

    Joined:
    19 Nov 2009
    Messages:
    52
    Likes Received:
    20
    Reputations:
    4
    можно написать процедуру на основе функции sleep
    Code:
    procedure sleeep(n:integer);//задержка в миллисекундах
    var i:integr;
    begin
    i:=0;
      repeat
      Application.ProcessMessages
      sleep(100);
      i:=i+100;
      until i>n;
    end;
    используем
    Code:
    sleeep(20000);//задержка в 20секунд
    окно программы зависать не будет.
     
  6. mironich:

    mironich: New Member

    Joined:
    7 Oct 2011
    Messages:
    25
    Likes Received:
    2
    Reputations:
    0
    Дк зачем процедура, Application.ProcessMessages всунуть и все но всеже лучше код в поток.
     
  7. Vasa2

    Vasa2 Banned

    Joined:
    19 Nov 2010
    Messages:
    41
    Likes Received:
    1
    Reputations:
    -5
    я к сожелению еще не изучил.
    Можно поподробней о Application.ProcessMessages, как сделать паузу а после ввода капчи (любого знака в едит) продолжить цикл?
     
  8. Vasa2

    Vasa2 Banned

    Joined:
    19 Nov 2010
    Messages:
    41
    Likes Received:
    1
    Reputations:
    -5
    k0tt0d, спасибо все получилось
     
  9. inCode

    inCode Member

    Joined:
    20 Jun 2011
    Messages:
    141
    Likes Received:
    22
    Reputations:
    5
    Дело в том, что у ТСа насколько я понял, однопоточная программа. И в данном случае ни пауза с исхользованием переменной, ни управление корневым потоком не даст нужного результата.
    В данном случае, можно использовать, либо во 2-ом потоке в бесконечном цыкле функцию которая будет ждать определенное событие (что является довольно приметивным, и совсем неправильным, и может привести к некоректной работе программы, т.к. в каждой итерации время работы каждого потока разное)
    Поэтому, есть второй вариант, а имнно асинхронное выполнение функций.
     
  10. pr_loader

    pr_loader New Member

    Joined:
    6 Jun 2011
    Messages:
    13
    Likes Received:
    0
    Reputations:
    0
    когда то использовал слип

    примерно так:

    // объявляем глобальную переменную например int_cap;

    при появлении капчи присваиваем этой переменной значение 0
    и пока оно например меньше 1 то ждем в цикле:
    while (int_cap<=1)
    {
    //здесь слип
    ::Sleep(3000);
    }

    по нажатию на баттон к примеру меняем значение переменной с 0 на 1

    ну и да это самый простой вариант.
     
  11. Kandi

    Kandi Member

    Joined:
    18 Nov 2009
    Messages:
    344
    Likes Received:
    17
    Reputations:
    0
    1. Используем Synchronize(procedure begin end);
    2. Внутри выводим капчу на форму
    3. Создаем глобальную переменную MyCaptchaCode: String; в неё будем помещать код введённый с формы.
    4. В синхронизации пишем примерно так:
    Code:
                            //Выводим капчу в TImage;
                            //делаем цикл
                            while MyCaptchaCode = '' do
                              begin
                                Sleep(500);
                              end;
    Отправляем код, получаем ответ, если хороший идём дальше если нет повторяем процедуру Synchronize
    
    5. На форме создаешь кнопку и Edit в Edite код с картинки. Кнопка забивает код из Edit в MyCaptchaCode

    P.S. Лучше отправить на antigate и не марать себе голову с Synchronize(); :)
     
  12. ShyRka_coder

    ShyRka_coder Member

    Joined:
    27 Jul 2010
    Messages:
    127
    Likes Received:
    7
    Reputations:
    5
    Да возьми потоки , на делфи их примеров тоннами ...
     
  13. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,032
    Likes Received:
    1,320
    Reputations:
    327
    off ой бля)пишу программу
     
  14. Chrome~

    Chrome~ Elder - Старейшина

    Joined:
    13 Dec 2008
    Messages:
    936
    Likes Received:
    162
    Reputations:
    27
    Как вариант, используй модальную форму для того, что бы вывести диалоговое окно с предложением ввести капчу. Тут не надо будет никаких циклов и т. д.