Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в эту темуОткрыть новую тему
> Задать таймер на выполнение строки кода
CKA3KA
сообщение 13.12.2018, 7:56
Сообщение #1


**

Neophyte
Сообщений: 28
Регистрация: 17.11.2018
Группа: Пользователи
Наличность: 0
Пользователь №: 19.119
Возраст: 33



(IMG:style_emoticons/default/smile.gif)
Требуется в начале кода перед первой :меткой задать таймер к примеру 30мин. на переход к определенной :метке,
по истечении этого времени независимо от выполняемой строки кода должен произойти переход на заданную в таймере метку.
Как сделать?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 13.12.2018, 8:36
Сообщение #2


***********

Модератор UOPilot
Сообщений: 9.460
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27708
Пользователь №: 11.279



Для начала прекратить использовать метки. В целом это ОЧЕНЬ плохая практика. Именно из-за этой практики у вас появляются такие вопросы, которые в нормальной архитектуре возникнуть не должны.

В целом в данном случае вменяемо - никак. Не очень вменяемо - можно запсутить параллельный скрипт, который будет мониторить эти тайминги, останавливать основной и запускать его заново. В начале основного скрипта при этом должно проверяться состояние переменной в параллельном скрипте и в зависимости от ее значения прыгать на нужную вам метку. При этом, если вам необходимо сохранить какие-либо рабочие данные (значения переменных, массивов, которые существовали до остановки скрипта), то вам их придется предварительно сохранять хотя бы в тот же параллельный скрипт. Все эти телодвижения должны иметь очень серьезное обоснование, т.е. проблем очень много, работы тоже много, поддерживать данные скрипты будет крайне затруднительно и скорость разработки очень сильно снизится, так же очень резко возрастает вероятность появления багов из-за увеличения сложности кода. Если бы мне сказали создавать подобный цирк, то я хотя бы день потратил на поиски возможности соскочить с этого аттракциона.


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
CKA3KA
сообщение 13.12.2018, 9:26
Сообщение #3


**

Neophyte
Сообщений: 28
Регистрация: 17.11.2018
Группа: Пользователи
Наличность: 0
Пользователь №: 19.119
Возраст: 33



Цитата(DarkMaster @ 13.12.2018, 8:36) *

Для начала прекратить использовать метки. В целом это ОЧЕНЬ плохая практика. Именно из-за этой практики у вас появляются такие вопросы, которые в нормальной архитектуре возникнуть не должны.

У меня пока все через метки делается, к примеру есть три условных блока и одна метка на действие,
и мой код имеет вид:

:метка_all
действие_2 //нужное для всех трех условных блоков, время выполнения к примеру 3сек за которые могут включиться условные блоки 1 или 2 или тот же 3 снова.

условный блок 1
действие_1
goto метка_all //для второго действия

условный блок 2
действие_1
goto метка_all //для второго действия

условный блок 3
действие_1
goto метка_all //для второго действия

Во-первых :метка расположенная перед блоками не дает потерять драгоценное время, если бы ее вообще не было и действие_2 мы бы прописывали в каждом условном блоке индивидуально
(к примеру в условном блоке 3 сработало true, то без метка_all мы бы потеряли драгоценное время, т.к. пока будет дальше прокручиваться код у нас первый и второй блок могут за это время включиться и выключиться)
во-вторых она сокращает размер кода.

Ну и почему же метки это типа "ЗЛО"
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 13.12.2018, 9:49
Сообщение #4


***********

Модератор UOPilot
Сообщений: 9.460
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27708
Пользователь №: 11.279



http://hosting.vspu.ac.ru/~chul/dijkstra/goto/goto.htm
Вот ничего за пол века не поменялось. Вообще.
Если читать это слишком трудно, то:
1) Ухудшается читаемость.
2) Ухудшается предсказуемость поведения.
3) Ухудшается простота поддержки кода.
4) В конченом итоге увеличивается время разработки.
5) Увеличивается количество багов.

Цитата
и мой код имеет вид:

Для всего этого существют конструкции if else end, switch case, while, for, вызов подпрограмм и т.д.

https://ru.wikipedia.org/wiki/%D0%A1%D0%BF%...%BA%D0%BE%D0%B4
как совсем примитвный пример

Сообщение отредактировал DarkMaster - 13.12.2018, 9:50


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
CKA3KA
сообщение 13.12.2018, 11:30
Сообщение #5


**

Neophyte
Сообщений: 28
Регистрация: 17.11.2018
Группа: Пользователи
Наличность: 0
Пользователь №: 19.119
Возраст: 33



ОК (IMG:style_emoticons/default/smile.gif)
Благодарю за разъяснение.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
sutra
сообщение 13.12.2018, 14:40
Сообщение #6


*******

Adept
Сообщений: 923
Регистрация: 10.8.2018
Группа: Пользователи
Наличность: 0
Пользователь №: 19.007



Код
 set timer4   // сброс контрольного таймера (4 чисто для примера, если остальные заняты)
while 1=1    // вечный глобальный цикл
  // действие 2
    set #usl1          // Сброс признака выполнения блока 1
    set #usl2          // Сброс признака выполнения блока 2
    set #usl3          // Сброс признака выполнения блока 3
    if timer4 > 30000  // если контрольное время (30 сек.) истекло
      set timer4       // сброс таймера контроля (уже для следующего контроля)
      set #usl2 1    // будет выполняться блок 2 (чисто для примера)
    else               // иначе выполнить стандартный анализ
      if ...
        set #usl1 1    // будет выполняться блок 1
      end_if
      if ...
        set #usl2 1    // будет выполняться блок 2
      end_if
      if ...
        set #usl3 1    // будет выполняться блок 3
      end_if
    end_if
  // завершение действия 2

  // условный блок 1
  if #usl1 = 1   // если обнаружен признак выполнения блока 1
    ...
    continue  // ДАЛЕЕ НИЧЕГО ВЫПОЛНЯТЬСЯ НЕ БУДЕТ
              // а произойдёт переход на начало цикла
              // по сути как goto
  end_if
  // и так далее с остальными блоками
  ...

end_while


Если внутри условного блока выполняются другие циклы любого типа, то нужно следить за уровнем continue. Т.е. если проверка прерывания сработала например внутри for, то нужно задать переход на следующий шаг глобального цикла так: continue 2, иначе прервётся цикл for.

Попытался объяснить как можно проще, по крайней мере Дарка не будет раздражать goto. Хотя в lua нашей версии continue тоже нет, так что если планируете переход на lua, то лучше подумать над другой архитектурой кода. Пример чисто для понимания процесса.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 13.12.2018, 14:53
Сообщение #7


***********

Модератор UOPilot
Сообщений: 9.460
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27708
Пользователь №: 11.279



Цитата
Попытался объяснить как можно проще, по крайней мере Дарка не будет раздражать goto.

Согласно поставленным изначально условиям - работать не будет. Там может быть одной из строк wait 100000000. И перехода по таймеру не будет, т.к. ничего не прервет этот wait.


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
sutra
сообщение 13.12.2018, 16:31
Сообщение #8


*******

Adept
Сообщений: 923
Регистрация: 10.8.2018
Группа: Пользователи
Наличность: 0
Пользователь №: 19.007



Цитата
Там может быть одной из строк wait 100000000

Блин, ну если сам себе злобный Буратино, то лучше бросить программирование.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
sutra
сообщение 13.12.2018, 16:59
Сообщение #9


*******

Adept
Сообщений: 923
Регистрация: 10.8.2018
Группа: Пользователи
Наличность: 0
Пользователь №: 19.007



Цитата
Там может быть одной из строк wait 100000000

Таких операторов вообще быть не должно. В моих кодах вообще нет операторов wait. Чего ждать то? Я делаю код таким, что ничего никогда не жду. В lua я даже клики сделал без wait, анализируя происходящее на экране, а не жду "у моря погоды".


Перегружается браузер - анализирую его готовность, в общем можете не верить, но у меня нет никаких wait-ов.

Вот из-за таких вот wait-ов и бездумно организованных циклов ... жмёшь на Esc , а в ответ "тишина". А я так считаю, лучше убить своё время (как не скажет cirus - один раз) и сделать всё по уму, но потом уже никогда не ждать.

Правда кто-то говорил, что надо делать wait 1, чтобы не было нагрузки на камень. Хотя и тут не факт, лучше иметь нормальный камень, ну разве что экономить электричество, но у себя я не замечал нагрузки на проц, хотя конечно мой проц загрузить - это надо сильно постараться.

Сколько ни смотрел ... Пилот грузит 5-10% (это на 6 ядрах).
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 13.12.2018, 23:05
Сообщение #10


***********

Модератор UOPilot
Сообщений: 9.460
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27708
Пользователь №: 11.279



Цитата
Сколько ни смотрел ... Пилот грузит 5-10% (это на 6 ядрах).

Там есть вранье. При включенном гипертрейдинге диспетчер будет показывать, что одно приложение жрет не более, чем 100/количество_ядер/2. Т.е. по факту занижается нагрузка в 2 раза.
Цитата
Таких операторов вообще быть не должно. В моих кодах вообще нет операторов wait. Чего ждать то? Я делаю код таким, что ничего никогда не жду. В lua я даже клики сделал без wait, анализируя происходящее на экране, а не жду "у моря погоды".

Попробуй так в wow сделать. Он от твоих кликов просто колом встанет. И анализируй потом хоть до 2 пришествия. Тебе на отправку left надо, скажем 5 тактов, ему на обработку клика 500 тактов. Пока не выключишь - не отвиснет никогда.
К тому же есть всякие переключатели-тумблеры. 2 раза нажал - оно обратно выключилось. Учитывая задержки отрисовки ты никогда не узнаешь, что там было.
Скорость безусловно важна и ее нужно бывает выжимать в некоторых моментах, но стабильность зачастую важна больше. У меня, например, не бывает желания вставать посреди ночи и искать, что же там забагалось, утром искать уже не получится - ситуация изменится, а запустить надо сейчас.


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
sutra
сообщение 14.12.2018, 1:24
Сообщение #11


*******

Adept
Сообщений: 923
Регистрация: 10.8.2018
Группа: Пользователи
Наличность: 0
Пользователь №: 19.007



Цитата
Тебе на отправку left надо

Не думаю, точнее уверен, что отрисовка картинки происходит не быстрее, чем это может вызвать зависание. Кликнуло и анализирует пока не сработает, а не долбит постоянно. Теперь про гипертрейдинг и загрузку. Знаешь, когда я запускаю свою прогу, когда там тысячи файлов - грузится на 100% и не размазывает как ты говоришь между ядрами (потоками), а конкретно грузит на 100% одно ядро, что и температура ядра тут же покажет. Так что позволю не согласиться. У меня всё и всегда работает как часы.

В чём чём а уж в "железе" я неплохо разбираюсь. Своими руками не один десяток компов собрал.

И в многозадачности тоже собаку съел, потому и имею 6 ядер, в своё время было нужно, сейчас уже излишество. Со мной многие мои коллеги спорили и про гипертрейдинг, но я не верю синтетическим тестам - тыкал носом в реальные тесты, например сколько времени будет тот же севензип архивировать. У Сайруса машинка работает быстрее на конкретных однопоточных приложениях, но на многопоточных вряд ли.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
sutra
сообщение 14.12.2018, 1:58
Сообщение #12


*******

Adept
Сообщений: 923
Регистрация: 10.8.2018
Группа: Пользователи
Наличность: 0
Пользователь №: 19.007



Кстати, пусть я не во многие игры играл, но всё-таки играл. Так вот моя нынешняя игра - самая капризная как раз на кликах. Только чаще всего наоборот - полно вариантов ложных срабатываний. И когда только начинал, мучался с этими ожиданиями. Сделаешь мало - ложное срабатывание, т.е. ты думаешь, что выбираешь что-то, а оно уже давно выбралось (на всплывающие менюшки). Сделаешь ожидание больше - просто не выбирается ничего (так сказать поезд ушёл). А вот теперь всё работает идеально. Хотя я не навязываю своё мнение, просто останусь при своём. Извини Дарк, если что не так сказал - плохое воспитание, вспыльчивый характер, теперь уж не переделать. Жизнь "весёлая" была.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 14.12.2018, 2:21
Сообщение #13


***********

Модератор UOPilot
Сообщений: 9.460
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 27708
Пользователь №: 11.279



Цитата
Не думаю, точнее уверен, что отрисовка картинки происходит не быстрее, чем это может вызвать зависание. Кликнуло и анализирует пока не сработает, а не долбит постоянно.

Я тебе свою практику говорю. Попробуй скил поспамить без вейтов, даже с проверками. Тетил на личе 3.13.
Цитата
Знаешь, когда я запускаю свою прогу, когда там тысячи файлов - грузится на 100%

Однопоточная задача не может грузить камень больше, чем на одно ядро. От этого не уйдешь. В целом это было протестировано на практике с пилотом, когда возникли подозрения, что из-за ГТ пилот шуршал медленнее (загрузка камня было 12% вместо должных 25%). Как оказалось - это лишь визуальный обман.

Это просто опыт. Это не теоретические выкладки.


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
sutra
сообщение 14.12.2018, 2:28
Сообщение #14


*******

Adept
Сообщений: 923
Регистрация: 10.8.2018
Группа: Пользователи
Наличность: 0
Пользователь №: 19.007



Цитата
Я тебе свою практику говорю. Попробуй скил поспамить без вейтов, даже с проверками.

Я не отрицаю, всегда найдётся кривизна. У меня это вызывает усмешку и сомнения в квалификации тех кто пишет такие программы, если конечно они умышленно не преследовали эти цели. Как говорили не так давно ... всегда найдётся диск, который не читается на твоём приводе, и всегда найдётся привод на котором не читается этот диск.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 29.3.2024, 1:43
Designed by Nickostyle