Author Topic: нужна помощь  (Read 8365 times)

0 Members and 1 Guest are viewing this topic.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: нужна помощь
« Reply #15 on: February 19, 2015, 06:53:58 AM »
Как бэ и не в задержках дело. Скрипт без объявления потока потребляет мало - там и задержки есть и все остальное. Я ведь что делаю, первой строчкой объявляю начало потока, последней объявляю конец потока, больше никаких изменений в скрипт не вношу и сразу, бац, проц грузится на лишних 25%.
Давай поспорим что в задержках?
Как это ты добавив две строки не вносишь изменения? Ты этими действиями добавил +1 поток к существующему. Основной скрипт это тоже поток, только явно не объявленный и его нельзя отключить.
Ты создал второй поток, а основной оставил пустым. А он выполняется в цикле. Вот тебе постоянный пустой цикл без задержки.
С какой целью ты это сделал, непонятно. Если это просто промежуточный этап большого скрипта и ты хотел посмотреть...
Сейчас добавь любую задержку снаружи твоих добавленных строк и посмотри. Ну не любую, от 10 мс.


BubukaBomb

  • Освоившийся
  • **
  • Posts: 36
    • View Profile
Re: нужна помощь
« Reply #16 on: February 19, 2015, 10:32:22 AM »
В том-то все и дело, что я не делаю "основной скрипт+новый поток". Для начала, я, весь основной скрипт "заключаю" в поток, т.е. у меня есть только один поток и больше ничего. Но я признаю, что был не прав - после строчки окончания потока, добавил задержку и все наладилось. Почему так происходит, у меня не хватает ума понять. Казалось бы, есть скрипт, работает, крутится, потребляет свои 3% и все хорошо, ну добавил я к нему в начале и в конце 2 строчки, обозвав его потоком... Что изменилось в поведении скрипта и зачем ему теперь понадобилась в конце задержка? Я, конечно еще слоупок в скриптописании, но хотелось бы понять в чем дело  :)

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: нужна помощь
« Reply #17 on: February 19, 2015, 11:19:03 AM »
В том-то все и дело, что я не делаю "основной скрипт+новый поток". Для начала, я, весь основной скрипт "заключаю" в поток, т.е. у меня есть только один поток и больше ничего...
Ты ошибаешься. Я же объяснил: основной скрипт это уже один поток. Он основной. Есть всегда. Остановить его нельзя (только HALT). И зациклен так же по кругу.
THREAD...END_THREAD ему не нужны. Можно сказать что они есть, но не отображаются, так понятней.

При добавлении THREAD...END_THREAD ты создал ВТОРОЙ поток, дочерний. При этом в основном осталось пусто.
Теперь у тебя крутится два потока. Один твой и один основной пустой. В нём нет ничего, ни одной команды одна NOP или PASS. Вот процессор и грузится. Нет разгружающих его WAIT

То же происходит, если нет задержки в потоке. Попробуй так
Code: (clickermann) [Select]
THREAD(two, 1)
   $b = 1
END_THREAD

Или если они есть, но есть условия, когда они не работают
Code: (clickermann) [Select]
THREAD(two, 1)
   $b = 1
   IF($b = 3)
      LCLICK(10,10)
      WAITMS(100)
   END_IF   
END_THREAD


BubukaBomb

  • Освоившийся
  • **
  • Posts: 36
    • View Profile
Re: нужна помощь
« Reply #18 on: February 19, 2015, 11:41:25 AM »
Так уже понятнее, но уточню еще раз:
было: (чисто пример)

Code: (clickermann) [Select]
WAITMS (RND(150, 300))
KEYPRESS (#SPACE)
WAITMS (RND(300, 500))

стало:

Code: (clickermann) [Select]
THREAD(main, 1)
WAITMS (RND(150, 300))
KEYPRESS (#SPACE)
WAITMS (RND(300, 500))
END_THREAD

Как я понял, у меня теперь организовалось ДВА потока - один пустой основной, без операторов, но который все равно жрет мощности и второй по имени "main". И их нужно ограничить задержкой в самом конце. Так или не так я понял?

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: нужна помощь
« Reply #19 on: February 19, 2015, 11:51:06 AM »
Так. Но эти манипуляции не имеют смысла, если и дальше так останется.
Твой "было" и так уже поток и отделять его не нужно.


BubukaBomb

  • Освоившийся
  • **
  • Posts: 36
    • View Profile
Re: нужна помощь
« Reply #20 on: February 19, 2015, 12:18:05 PM »
Так мне, в моем настоящем скрипте, нужно будет приостанавливать главный поток на время выполнения дополнительного потока. Т.е. основной скрипт крутится, но изредка выпрыгивают "левые" окна - вот их и будет закрывать доп. поток. Как я понял из объяснений Oravena (в этой теме), чтобы так работало нужно чтобы скрипты были "разведены" по потокам. Закрывать "левые" окна из основного скрипта (без организации потоков) у меня не получается, скрипт их почему-то игнорирует (не видит).

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: нужна помощь
« Reply #21 on: February 19, 2015, 12:50:42 PM »
Ну тогда паузу и всё.
Code: (clickermann) [Select]
THREAD(main, 1)
   // основной
END_THREAD

THREAD(error, 1)
   // отловщик
END_THREAD

// корневой
WAIT(3600)

Хотя, если контролирующий не останавливается, пусть он будет корневым
Code: (clickermann) [Select]
THREAD(main, 1)
   // основной
END_THREAD

// отловщик
// блаблабла
« Last Edit: February 19, 2015, 04:37:49 PM by Vint »


BubukaBomb

  • Освоившийся
  • **
  • Posts: 36
    • View Profile
Re: нужна помощь
« Reply #22 on: February 19, 2015, 01:12:46 PM »
О, да. Хорошая мысль, так и буду пробовать. Ведь ловильщик и вправду не останавливается. Спасибо за разъяснения, еще немного знаний приобрел  :)