Автокликер Clickermann :: Форум

Основной раздел => Общие вопросы => Topic started by: Полуночник on November 08, 2012, 09:48:47 AM

Title: Цикличность
Post by: Полуночник on November 08, 2012, 09:48:47 AM
Вопросик такой. Допустим сделал цикл ожидания пока не появится какая то картинка на экране. А браз взял и подвис гад...
В этом случае цикл будет вечным( :o Как то надо сделать проверку на время ожидания что ли... Например если цикл не завершается в течении 30 сек., то провести какие то действия. Насколько это реально? И как воплотить в жисть? ::)
Title: Re: Цикличность
Post by: Johnny on November 08, 2012, 11:24:08 AM
Code: (clickermann) [Select]
$start = $_time_t

print("i'm coming..")


while ($flag = 0)
  print("get me out of here!111")

  if ($_time_t > $start + 30)
    $flag = 1
  end_if

  wait(3)
end_cyc

print("freedom at least!")

halt

соответственно если картинка найдена, то флажок так же взводится чтоб выйти из цикла
Title: Re: Цикличность
Post by: Полуночник on November 08, 2012, 07:20:26 PM
всё понял кроме $_time_t...  сорри, я ламер))))
точнее не понятно откуда будет начинаеться отсчёт? как он ведётся вообще?
Title: Re: Цикличность
Post by: Oraven on November 08, 2012, 07:57:13 PM
всё понял кроме $_time_t...  сорри, я ламер))))
точнее не понятно откуда будет начинаеться отсчёт? как он ведётся вообще?


Особое значение имеют системные переменные. Их имена зарезервированы программой и значения переменных подставляются автоматически при обращении к ним.

 
Имя переменнойЗначение
$_xmouseПеременная при каждом обращении принимает значение координаты мыши по оси Х
$_ymouseТоже, но для оси У
$_xmaxМаксимально допустимое значение X, вычисляется как ширина разрешения - 1
$_ymaxАналогично для Y
$_return1Переменная используется для возврата в нее значения определенными инструкциями
$_return2Аналогично
$_lineСодержит номер выполняемой строки сценария
$_cursorСодержит код вида указателя мыши
$_msСистемный таймер Windows, отсчитывающий миллисекунды с момента старта ОС
$_time_tТекущее время в формате Unix-систем (подробнее (http://ru.wikipedia.org/wiki/Epoch))
$_time_hТекущий час
$_time_mТекущая минута
$_time_sТекущая секунда
$_hwndТекущий hwnd (если 0, то привязки к окну нет)
Title: Re: Цикличность
Post by: Vint on November 22, 2012, 10:13:56 AM
В догонку пара вопросов про циклы.

В Хэлпе в описании FOR написано:
"циклы вложенности больше 2 уровня не поддерживаются"

Это же относится и к WHILE ?

Ограничение действует глобально на весь скрипт?
Например:
Code: [Select]
for($var, $var < 5)
  for($var2, $var2 < 3)
    ....
    GOSUB(вызвали пп)
  end_cyc
end_cyc
....
SUB(вызвали пп)
  for($var, $var < 5) //    Вот ЭТО будет работать или нет?
  ... 
  end_cyc
end_sub


Почему такое ограничение на глубину?
Действует ли ограничение на глубину вложенности подпрограмм?

Title: Re: Цикличность
Post by: Oraven on November 22, 2012, 11:53:03 AM
Да если через СУБ то тройной цикл работает это относится и к WHILE
Ну а причем тут подпрограммы? Ограничения на них нет.
Title: Re: Цикличность
Post by: Vint on November 22, 2012, 12:08:12 PM
Да если через СУБ то тройной цикл работает это относится и к WHILE
Спасибо.
Ну а причем тут подпрограммы? Ограничения на них нет.
Спросил чтоб точно знать, пока вспомнил, а не столкнуться с этим пост фактум.
Title: Re: Цикличность
Post by: Johnny on November 22, 2012, 01:07:00 PM
Почему такое ограничение на глубину?
это ограничение на глубину моих познаний на тот момент лол. субы появились позже циклов и уже были сделаны "по канонам" поэтому там проблем с отслеживанием вложенности нет (нет ведь?).

в ближайшем обновлении думаю удастся переделать циклы.
уже сейчас (в моем прототипе лол) например нормально отрабатывает вот такой жуткий код
[spoiler=4х уровневый while]
Code: (clickermann) [Select]
while($a < 3)
   
   $b = 0
   while($b < 3)
     
      $c = 0
      while($c < 3)
         
         $d = 0
         while($d < 3)
            print($a, $b, $c, $d)
            inc($d)
         end_cyc
         inc($c)
         
      end_cyc
      inc($b)
     
   end_cyc
   inc($a)
   
end_cyc

halt
[/spoiler]

есть еще ряд нюансов потому как в отличие от С у нас нет ни области видимости переменных ни пространства имен. поэтому например во вложенных FOR (так же как сейчас для while, см. пример) скорее всего перед шапкой цикла придется обнулять переменную цикла, что конечно же нонсенс для компилируемых языков.
Title: Re: Цикличность
Post by: Сергей on November 23, 2012, 01:40:49 AM
Так просто использовать разные переменные во вложенных циклах, не? После i - j, затем k, затем l, затем m… И дальше можно продолжать :)
Title: Re: Цикличность
Post by: ЦИТРИН on January 19, 2013, 04:28:15 PM
Помогите понять, в чем принципиальная разница между сабом  и инклудом,  кроме написания отдельного файла?
 Если ли преимущества, и в каких случаях?
Title: Re: Цикличность
Post by: Johnny on January 22, 2013, 09:55:11 AM
объем отображаемого кода в редакторе становится меньше. во внешние файлы можно спрятать уже отжаленный код, который нареканий не вызывает.
или же просто вставлять туда повторяющийся код, который из-за синтаксиса языка не может быть оформлен как подпрограмма или как то еще.

а подпрограмма это подпрограмма.
Title: Re: Цикличность
Post by: Oraven on January 22, 2013, 12:34:29 PM
Из суба по GOTO выпрыгивать вроде как нельзя, а из инклуда вполне можно.
Title: Re: Цикличность
Post by: Vint on January 22, 2013, 12:51:33 PM
Все инклуды "вставляются" в основной код по мере работы скрипта или все в самом начале?
Вроде бы должны по ходу работы, тогда на слабом компе должен работать медленнее. Нужно доп. время на открытие файла. И если таких инклудов много или они в цикле может быть затык.
Title: Re: Цикличность
Post by: Johnny on January 22, 2013, 12:55:35 PM
да я же уже писал елки как работает инклуд. в момент загрузки скрипта строка с инклудом просто заменяется на содержимое файла, указанное в инклуде. и все.
сам по себе инклуд не является никакой логической частьюязыка сценариев. это директива препроцессора, потому у нее свой собственный синтаксис
Title: Re: Цикличность
Post by: ЦИТРИН on January 22, 2013, 09:10:36 PM
а подпрограмма это подпрограмма.
Можно ли собрать все сабы и оформить их инклудом ?
Title: Re: Цикличность
Post by: ЦИТРИН on January 22, 2013, 09:12:14 PM
Из суба по GOTO выпрыгивать вроде как нельзя, а из инклуда вполне можно.
Хм.. вот не знал.
Выпрыгиваю  себе спокойно по GOTO из любого места в сабе,  куда угодно.
Наверно ещё не сталкивался с особенностями такого запрета.