Вверх ↑
Этот топик читают: Гость
Ответов: 3889
Рейтинг: 362
#1: 2011-08-05 19:40:20 ЛС | профиль | цитата
В процессе написания векторного редактора столкнулся с необходимостью отслеживания момента, когда мышка начала и перестала двигаться, тогда я это решил ChangeMon и флагом на дискретных элементах (пришлось серьёзно потанцевать с бубном).
Сегодня miver опубликовал забавную схему дробления строки на группы символов, разделённые пробелом, в которой используется тот же ChangeMon. и опять такая же задача - узнать, что больше изменений не происходит. Он этот вопрос не решал, т.к. задачей была минимальная схема, а это её серьёзно раздувает и замедляет.

Это была преамбула, теперь - амбула.

Если хотим в этих и подобных случаях получить универсальное, гениальное и простое решение - слёзно просим кого-нибудь с доступом к SVN добавить две строчки в условный переход кода ChangeMon и оформить ещё одно событие - событие неизменности данных. Собственно, вот и вся необходимая и достаточная доработка. Сразу станет возможным делать ветвление - действие при изменении и действие при неизменности.

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

Если продолжить мысль, добавив триггер получаем детектор "заднего фронта" изменений - реакцию на прекращение изменений. Тоже полезный режим)
карма: 1

0
Ответов: 4641
Рейтинг: 334
#2: 2011-08-05 20:00:59 ЛС | профиль | цитата
1nd1g0 писал(а):
иногда бывает очень полезно реагировать на приостановление каких-либо изменений

а это случаем не логическое сравнение на равенство?
карма: 1
Время верстки: %cr_time% Текущее время: %time%
0
Ответов: 3889
Рейтинг: 362
#3: 2011-08-05 20:04:20 ЛС | профиль | цитата
Ravilr, ключевое слово - приостановление. Регистрируем начало изменений и регистрируем конец изменений, а период затишья после (полное отсутствие изменений) - игнорируем. Тут-то и всплывает ChangeMon, имеющий такую удобную функцию определения начала изменений (начался приём данных, например, координат мыши при движении, изменение положения регулятора на панели, появился и держится установленный бит в порту, загрузки текста в элемент браузера - у него нет нормального контроля завершения загрузки и т.п.). А вот функции определения конца изменений иили неизменности данных, увы - нет. Была бы, - можно было бы одним компонентом обходиться. А пока приходится сбрасывать какой-нибудь флаг, потом его при начале изменения потока, делать проверку отдельным куском схемы, установлен ли флаг, если нет - отслеживать, давно ли он сброшен - если только что - одно действие, если давно - другое.

Вот чтобы немного меньше суеты было я и поднял эту тему.
карма: 1

0
Ответов: 4641
Рейтинг: 334
#4: 2011-08-05 20:10:40 ЛС | профиль | цитата
1nd1g0, на пальцах пожалуйста
так?
code_24814.txt
карма: 1
Время верстки: %cr_time% Текущее время: %time%
0
файлы: 1code_24814.txt [928B] [433]
Ответов: 3889
Рейтинг: 362
#5: 2011-08-05 20:14:30 ЛС | профиль | цитата
Ravilr, я на пальцах выше дописал)
карма: 1

0
Ответов: 4641
Рейтинг: 334
#6: 2011-08-05 20:18:39 ЛС | профиль | цитата
все равно ничего не понял. Ты хочешь контролировать неизменность данных или выдавать событие при не изменении данных? Т.е грубо говоря по таймеру или по поступлению данных в потоке?
карма: 1
Время верстки: %cr_time% Текущее время: %time%
0
Ответов: 67
Рейтинг: 5
#7: 2011-08-05 20:23:46 ЛС | профиль | цитата
1nd1g0,
такое добавить?
http://forum.hiasm.com/forum_serv.php?q=56&id=2569
карма: 1

0
Ответов: 3889
Рейтинг: 362
#8: 2011-08-05 20:24:15 ЛС | профиль | цитата
Ravilr, Та точка, что легче всего добавляема в ChangeMon, срабатывает при любой неизменности данных.

Я же просто привёл в пример ещё более сложную задачу, где мне надо было чётко и однократно среагировать на прекращение изменений - когда мышка останавливалась, перерисовывался экран, но перерисовывать (пока мышка стоит на месте) регулярно его по таймеру опроса мышки было бы расточительно, потому пришлось реализовывать механизм с флагом.

Если данные посерьёзнее мышиных координат, то монитор изменений уже значительно быстрее, чем самодельная логика. И там уже всё есть - осталось только ветку с Else после ветки с Then приписать) Ну а триггер, однократно срабатывающий только в момент остановки изменений в компоненте реализовать - это сверх ожиданий, хотя совсем не трудно.

При работе с процессами реального времени крайне полезная штука, когда нужно переждать активность третьей стороны.
карма: 1

0
Ответов: 16884
Рейтинг: 1239
#9: 2011-08-05 21:19:59 ЛС | профиль | цитата
1nd1g0 писал(а):
И там уже всё есть - осталось только ветку с Else после ветки с Then приписать
ну и нафига эта трепология. Конкретно допиши и выложи коды.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 3889
Рейтинг: 362
#10: 2011-08-05 21:35:30 ЛС | профиль | цитата
Tad, коды уже выложили до меня (10755), судя по всему, в апреле этого года уже кому-то аналогичная идея приходила в голову.
карма: 1

0
Ответов: 3349
Рейтинг: 233
#11: 2011-08-05 21:39:45 ЛС | профиль | цитата
1nd1g0, Что то уж правда ты загнул. Это делается 2 элементами
code_24815.txt
------------ Дoбавленo в 21.39:
1nd1g0, Что то уж правда ты загнул. Это делается 2 элементами

Add(MultiElementEx,9844531,406,609)
{
}
BEGIN_SDK
Add(EditMultiEx,15238471,21,21)
{
WorkCount=#9:doCompare|
EventCount=#8:onEvent2|7:onFalse|
DataCount=#3:Op1|
VOffset=100
HOffset=70
link(doCompare,9860735:doCompare,[])
}
Add(Memory,8724448,98,68)
{
MakeExt(Default,,Default)
link(onData,15238471:onEvent2,[(226,74)(226,127)])
}
Add(If_else,9860735,91,121)
{
Type=5
link(onTrue,8724448:doValue,[(135,127)(135,111)(81,111)(81,74)])
link(onFalse,15238471:onFalse,[])
link(Op1,15238471:Op1,[])
link(Op2,8724448:Value,[])
}
END_SDK

карма: 1

0
файлы: 1code_24815.txt [588B] [333]
Ответов: 3889
Рейтинг: 362
#12: 2011-08-05 21:53:31 ЛС | профиль | цитата
Ivann, да нет, всё логично, зачем увеличивать и замедлять схему, если можно доделать уже имеющийся компонент, раз уж он всё равно есть. Если он такой не нужный, то можно таки добавить функцию триггера отслеживания прекращения изменений, и тогда он станет незаменимым в алгоритмах реакции на внешние факторы.
карма: 1

0
Главный модератор
Ответов: 2999
Рейтинг: 396
#13: 2011-08-05 22:14:35 ЛС | профиль | цитата
1nd1g0, кто мешает сделать самому Ex версию компонента, выложить на форуме и если сообщество одобрит, то поместить на SVN?
карма: 6
Дорогу осилит идущий. Install/Update HiAsm.NET
0
Ответов: 3889
Рейтинг: 362
#14: 2011-08-05 22:24:44 ЛС | профиль | цитата
Nic, по прошлому опыту знаю, что всё равно потом всё переписывают гуру, а тут вообще буквально две-три строчки и одна строчка в ini. Да ещё и кто-то это уже делал, как оказалось. Получается, я лишь поддерживаю чужую идею, не претендуя на авторство. А триггер для определения переходного процесса можно и снаружи привесить, но для его работы тоже требуется событие равенства данных, которого у нас пока нет.
карма: 1

0
Ответов: 8926
Рейтинг: 823
#15: 2011-08-06 14:57:27 ЛС | профиль | цитата
1nd1g0, на рассыпухе (если хватит терпения собрать )
------------ Дoбавленo в 14.41:
Add(MultiElementEx,2754085,175,91)
{
@Hint=#35:Определение движения мыши по зкрану|
}

------------ Дoбавленo в 14.54:
BEGIN_SDK
Add(EditMultiEx,15956712,21,21)
{
EventCount=#71:onStop=Одно событие происходит при остановке мыши на более чем 100 мсек|
------------ Дoбавленo в 14.56:
Нет, не получится
------------ Дoбавленo в 14.57:
Интернет и форум МАТЬ-ПЕРЕМАТЬ!
карма: 19

0
Сообщение
...
Прикрепленные файлы
(файлы не залиты)