Скрипт секундомера
|
|
as-master | Дата: Воскресенье, 07 Сентября 2008, 21:22 | Сообщение # 1 |
Разводящий
Группа: Модераторы
Сообщений: 2337
Репутация: 101
Награды: 5
Статус: Offline
| Кто предложит умный скрипт для секундомера? Задание: есть две кнопки - Старт и Стоп. (Пожалуй, три - еще Сброс). Есть текстовый объект Text для вывода времени. Есть объект Script. Всё!
Да пребудет с вами ММВ!
|
|
| |
Dordex | Дата: Воскресенье, 07 Сентября 2008, 22:55 | Сообщение # 2 |
Необукер
Группа: Проверенные
Сообщений: 533
Репутация: 16
Награды: 9
Статус: Offline
| Вот:
Сообщение отредактировал Омар - Воскресенье, 07 Сентября 2008, 23:10 |
|
| |
as-master | Дата: Понедельник, 08 Сентября 2008, 00:35 | Сообщение # 3 |
Разводящий
Группа: Модераторы
Сообщений: 2337
Репутация: 101
Награды: 5
Статус: Offline
| Хотелось бы: 1. Сотые доли секунд видеть, иначе смысла в секундомере нет. 2. Иметь только ОДИН текстовый объект. Слабо?
Да пребудет с вами ММВ!
|
|
| |
Dordex | Дата: Понедельник, 08 Сентября 2008, 00:36 | Сообщение # 4 |
Необукер
Группа: Проверенные
Сообщений: 533
Репутация: 16
Награды: 9
Статус: Offline
| Честно говоря для меня слабо?
|
|
| |
as-master | Дата: Понедельник, 08 Сентября 2008, 01:09 | Сообщение # 5 |
Разводящий
Группа: Модераторы
Сообщений: 2337
Репутация: 101
Награды: 5
Статус: Offline
| Quote (Омар) для меня слабо? Это вопрос или утверждение? Вообще, что-то все расслабились, всего один человек и откликнулся на вопрос. А вопрос по сути не такой уж и сложный. Просто хотелось тут видеть несколько РАЗНЫХ решений, это всегда интересно. Так и находится лучший путь. Надеюсь, на неделе другие участники форума тоже откликнутся.
Да пребудет с вами ММВ!
|
|
| |
sk | Дата: Понедельник, 08 Сентября 2008, 11:30 | Сообщение # 6 |
Новый участник
Группа: Проверенные
Сообщений: 12
Репутация: 0
Награды: 0
Статус: Offline
| Дело не в этом. Самый затруднительный момент для меня оказался - это сотые... а точнее, тысячные... Фишка в том, что если делать отсчёт не по секундам, а по десятым или сотым (и тем более уж по тысячным!), то секундомер получается неточным. Секунды начинают отставать от реального времени. (Не знаю как у вас, но я долго экспериментировал с разными командами MMB, и везде результат был одинаковый. Ниболее точным шагом оказались 1000мс. Они шли ровно, даже если насиловать процессор и пр.) Немного поломав голову, я придумал один интересный (может даже и авантюрный) вариант. Хочу в защиту написать пару преимуществ данного секундомера. Первое - это то, что он достаточно устойчив к загруженности процессора. (Специально издевался над компом - секунды шли не отставая) Второе - реализован отсчет до тысячных. И это не предел, при желании можно сделать и больше цифр после запятой. (Правда, это уже полное безумие.) Ещё, надо сказать, что скрипт отсчёта секунд и отрисовки их на табло я сделал процессами независимыми друг от друга. Я посчитал, что это важный момент. Короче, вот, что у меня получилось.
|
|
| |
as-master | Дата: Понедельник, 08 Сентября 2008, 11:37 | Сообщение # 7 |
Разводящий
Группа: Модераторы
Сообщений: 2337
Репутация: 101
Награды: 5
Статус: Offline
| Дорогой мой друг sk, если бы эта задачка была совсем уж простенькой, я бы и не задавал тут вопроса :)))))))Добавлено (08 Сентябрь 2008, 11:36) --------------------------------------------- А за проект тебе большой жирный ЗАЧЁТ!!! Я его детально посмотрю и поизучаю попозже, после чего непременно выложу на сайт. Хорошая работа, мне понравилось Одна просьба: изложить кратенько принцип работы твоего варианта программы. Что в ней необычного, как это вообще работает. Добавлено (08 Сентябрь 2008, 11:37) --------------------------------------------- И последнее - насчет тысячных долей я перегнул, по ошибке. Обычно довольствуются сотыми долями (в спорте, например).
Да пребудет с вами ММВ!
|
|
| |
toizy | Дата: Понедельник, 08 Сентября 2008, 11:44 | Сообщение # 8 |
Студийная субстанция
Группа: Администраторы
Сообщений: 2309
Репутация: 29
Награды: 12
Статус: Offline
| Quote (sk) Самый затруднительный момент для меня оказался - это сотые... а точнее, тысячные... имейте в виду, что системный таймер считает тысячные отвратительно. Для рассчёта тысячных нужно использовать таймер мультимедийный, к которому доступа из ММВ нет
Жизнь оказалась не такой уж и забавной, как поначалу...
|
|
| |
as-master | Дата: Понедельник, 08 Сентября 2008, 11:46 | Сообщение # 9 |
Разводящий
Группа: Модераторы
Сообщений: 2337
Репутация: 101
Награды: 5
Статус: Offline
| Дима, ты посмотри сначала проект Сергея - всё работает офигительно.
Да пребудет с вами ММВ!
|
|
| |
sk | Дата: Понедельник, 08 Сентября 2008, 11:58 | Сообщение # 10 |
Новый участник
Группа: Проверенные
Сообщений: 12
Репутация: 0
Награды: 0
Статус: Offline
| Quote (as-master) Как это вообще работает? А хрен её знает!!! ))) Вся штуковина в том, что секунды идут своей дорогой, миллисеки - своей, но зависимо от секунд, а табло - своей. Появляется секунда - начинается отсчет в scr_counter (счётчик), появляется следующая секунда - начинается новый отсчёт в счётчике и тут же вычисляется среднее арифметич. предыдущего показателя с новым показателем. Этот средний показатель счётчика является неким потолком в текущем континиуме. Для чего он нужен: зная верхний максимум, мы легко высчитываем из этого ТЕКУЩИЕ сотые, тысячные (хоть миллионные). По простой формуле, используя проценты. И получается, что с каким бы шагом не шагали секунды, то тысячные на любом компьютере, при любой загрузке процессора всегда будут высчитаны. Лишь бы сами секунды шли ровно. (Хотя их я мучил по-всякому - вроде бы всё нормально.) Ещё там можно задать время отрисовки табло, но это уже не так важно...
|
|
| |
sk | Дата: Понедельник, 08 Сентября 2008, 13:43 | Сообщение # 11 |
Новый участник
Группа: Проверенные
Сообщений: 12
Репутация: 0
Награды: 0
Статус: Offline
| Вот тот же проект, только с комментариями в коде. Так будет легче сообразить что к чему. Ещё вывел параметр счётчика на табло для наглядности. Видно, как он варьируется в зависимости от загруженности ЭВМ. Достаточно забавно выглядит. Я даже сразу и не сообразил, но ведь получился абсолютно честный FPS мультибилдерского приложения. ) Конечно, если прога потребуется по своему прямому назначению, то лучше собрать exe без комментариев. Лишнюю грязь надо всегда того...! (FPS будет выше!)))
|
|
| |
toizy | Дата: Понедельник, 08 Сентября 2008, 15:23 | Сообщение # 12 |
Студийная субстанция
Группа: Администраторы
Сообщений: 2309
Репутация: 29
Награды: 12
Статус: Offline
| Quote (as-master) всё работает офигительно Офигительно, но миллисекунды считаются неправильно! я о чём - в лучшем случае до 1/10 секунды, если мельче, то результату таймера уже не стоит доверять
Жизнь оказалась не такой уж и забавной, как поначалу...
|
|
| |
as-master | Дата: Понедельник, 08 Сентября 2008, 15:36 | Сообщение # 13 |
Разводящий
Группа: Модераторы
Сообщений: 2337
Репутация: 101
Награды: 5
Статус: Offline
| Quote (sk) Вот тот же проект, только с комментариями в коде. Прекрасно! Для сайта как раз самое то. Сергей, еще ридмишку напиши к проекту и мне вышли. Либо тут выложи. Quote (sk) получился абсолютно честный FPS мультибилдерского приложения Забавно! Нужно эту тему подробнее обсудить. Quote (sk) если прога потребуется по своему прямому назначению, то лучше собрать exe без комментариев. Кстати, хоть и не в тему, я всегда об этом думаю. Сначала я считал, что при компиляции ММВ не учитывает комменты, но на размер файла они влияют точно. А вот влияют ли на загрузку компьютерных ресурсов - это пока вопрос открытый. Кто что скажет? Quote (toizy) миллисекунды считаются неправильно В сущности, одной десятой вполне достаточно для бытового назначения
Да пребудет с вами ММВ!
|
|
| |
toizy | Дата: Понедельник, 08 Сентября 2008, 19:17 | Сообщение # 14 |
Студийная субстанция
Группа: Администраторы
Сообщений: 2309
Репутация: 29
Награды: 12
Статус: Offline
| Quote (as-master) А вот влияют ли на загрузку компьютерных ресурсов если камменты сохранаюца в экзешние, то они и загружаются в память. На быстродействие влиять не должно, разумеется, если их там не десяток мегабайт
Жизнь оказалась не такой уж и забавной, как поначалу...
|
|
| |
sk | Дата: Понедельник, 08 Сентября 2008, 20:08 | Сообщение # 15 |
Новый участник
Группа: Проверенные
Сообщений: 12
Репутация: 0
Награды: 0
Статус: Offline
| Quote (toizy) Миллисекунды считаются неправильно! Согласен, что там они приблизительные, по ситуации. Однако, думаю, что вполне должны совпадать с настоящими. Это оказался единственный способ для MMB (по крайней мере я лучше способа не придумал.) Может, кто-нибудь ещё что-нибудь предложит? Посмотрим. Quote (as-master) достаточно для бытового назначения Я тож так думаю. Не олимпийские же результаты засекать! ) Если нужен серьёзный секундомер, то и делать его нужно, наверно, не в MMB. А здесь, думаю, сойдёт - поиграться самое то. Quote (as-master) еще ридмишку напиши к проекту ok. Там описать, как работает скрипт? А ещё чего-нибудь надо?
|
|
| |
as-master | Дата: Понедельник, 08 Сентября 2008, 21:21 | Сообщение # 16 |
Разводящий
Группа: Модераторы
Сообщений: 2337
Репутация: 101
Награды: 5
Статус: Offline
| Quote (sk) Там описать, как работает скрипт? А ещё чего-нибудь надо? Напиши, что считаешь нужным - ты ведь автор (это тоже не забудь указать!) Я просто вложу твой текстовый файл в архив с проектом.
Да пребудет с вами ММВ!
|
|
| |
Oleg_88 | Дата: Понедельник, 26 Декабря 2011, 23:21 | Сообщение # 17 |
Любопытный
Группа: Пользователи
Сообщений: 33
Репутация: 0
Награды: 0
Статус: Offline
| Тема старовата, но всё же напишу здесь. Взял из второго поста пример секундомера и попробывал поставить его в свойства страницы, чтобы сам при запуске начинал считать, работает, потом копирую и вставляю ещё раз все элементы и запускаю параллельно с первым не работает. Для второго секундомера все метки переписал, даже все переменные отличаются от оригинала всеравно работает не правильно. По идее стали два совершенно разные секундомера. Если запускаешь второй то первый останавливается и наоборот. Как сразу два запустить что бы они вместе работали так и не смог сделать:(
|
|
| |
YURIY | Дата: Вторник, 27 Декабря 2011, 00:46 | Сообщение # 18 |
Злостный админ
Группа: Администраторы
Сообщений: 3018
Репутация: 71
Награды: 28
Статус: Offline
| В тему вызываются телепаты.
Вечная память Андрею Сергееву!
|
|
| |
Oleg_88 | Дата: Вторник, 27 Декабря 2011, 01:31 | Сообщение # 19 |
Любопытный
Группа: Пользователи
Сообщений: 33
Репутация: 0
Награды: 0
Статус: Offline
| Объяснить наверно трудно будет, вот два в одном
|
|
| |
YURIY | Дата: Вторник, 27 Декабря 2011, 01:56 | Сообщение # 20 |
Злостный админ
Группа: Администраторы
Сообщений: 3018
Репутация: 71
Награды: 28
Статус: Offline
| Прочитайте ВНИМАТЕЛЬНО в справке про команду ScriptTimer и всё поймёте.
Вечная память Андрею Сергееву!
|
|
| |
Oleg_88 | Дата: Среда, 28 Декабря 2011, 22:41 | Сообщение # 21 |
Любопытный
Группа: Пользователи
Сообщений: 33
Репутация: 0
Награды: 0
Статус: Offline
| Danke Добавлено (28 Декабрь 2011, 22:41) --------------------------------------------- Если честно у меня так и не получилось одновременно запустить два секундомера. Разместил на верхний уровень, сделал вот так
ScriptTimer("Timer2=Master Layer::Script","0") ScriptTimer("Timer1=Master Layer::Script1","0") думаю здесь что то надо дописать или исправить, почему то срабатывает только верхняя строка, может пишу что то с ошибкой. Много вариантов перепробывал, но так и не нашел правильного решения.
|
|
| |
YURIY | Дата: Четверг, 29 Декабря 2011, 00:01 | Сообщение # 22 |
Злостный админ
Группа: Администраторы
Сообщений: 3018
Репутация: 71
Награды: 28
Статус: Offline
| Я в Вашем проекте прописал для каждого секундомера имена для двух таймеров, упоминающихся по два раза. Итого - прописать в четырёх местах, больше ничего не нужно.
Вечная память Андрею Сергееву!
|
|
| |
Oleg_88 | Дата: Четверг, 29 Декабря 2011, 00:43 | Сообщение # 23 |
Любопытный
Группа: Пользователи
Сообщений: 33
Репутация: 0
Награды: 0
Статус: Offline
| Вы имели в виду вот это ScriptTimer("TIMER1=Script1","0") Я подписывал имена таймерам, в кнопках и в "скриптах", но кнопки почему то останавливают друг друга или я не о том
|
|
| |
Alex3A | Дата: Четверг, 29 Декабря 2011, 01:21 | Сообщение # 24 |
Друг клуба ММВ
Группа: Проверенные
Сообщений: 2646
Репутация: 39
Награды: 11
Статус: Offline
| Quote (Oleg_88) ScriptTimer("TIMER1=Script1","0") Слово ScriptTimer состоит из двух слов, скрипт и таймер. А таймер фсе же, предполагает какую либо задержку, а у тебя она 0. Задержку менее 50 ставить безсмысленно, и при написании скриптов нуна думать еще и головой, и учитывать не только сам код, но и время его выполнения. ММВ не имеет так называемых паралельных процессов, типа что бы что то выполнялось одновременно. Есть то что типа называется полупаралельным процессом. Винда вообще, событийно ориентированная штука, основанная на сообщениях, которые записываются в очередь и выполняются последовательно, при этом, однотипные сообщения она может просто проигнорировать. Вот у тебя все и останавливает. Невозможно одновременно таскать и в зад и вперед.
|
|
| |
YURIY | Дата: Четверг, 29 Декабря 2011, 15:45 | Сообщение # 25 |
Злостный админ
Группа: Администраторы
Сообщений: 3018
Репутация: 71
Награды: 28
Статус: Offline
| Quote (Oleg_88) Я подписывал имена таймерам, в кнопках и в "скриптах", но кнопки почему то останавливают друг друга
Блин, да как там может не получиться, не пойму...
Берёте вот этот проект:
Quote (Oleg_88) Прикрепления: 27.rar(2Kb)
и для первого секундомера обзываете таймер, где он упоминается в двух местах, и для второго делаете тоже самое.
Что может быть проще?
Quote (Alex3A) Вот у тебя все и останавливает.
Алекс, ну что такое ты говоришь... Я пишу выше, как исправить проблему, а ты мне противоречишь. Попробуй сам, если не веришь, всё прекрасно работает.
Вечная память Андрею Сергееву!
|
|
| |
Oleg_88 | Дата: Пятница, 30 Декабря 2011, 22:46 | Сообщение # 26 |
Любопытный
Группа: Пользователи
Сообщений: 33
Репутация: 0
Награды: 0
Статус: Offline
| Наверно остаётся толко показать что я сделал. Оставил как есть, вот это в кнопке Code If (runZ=0) Then runZ=1 ScriptTimer("TIMER1=Script1","0") Return() End If (runZ=1) Then runZ=0 End это в самом скрипте Code ScriptTimer("TIMER1=Script1","1000") во втором секундомере так, Code ScriptTimer("TIMER2=Script","0") ScriptTimer("TIMER2=Script","1000") время тоже менял, что то тоже не получается, если у Юры работает, то наверно я где то неправильно написал.
Добавлено (30 Декабрь 2011, 22:46) --------------------------------------------- Юрий, я неправильно обозвал таймеры или причина в ещё в чём то?
|
|
| |
YURIY | Дата: Суббота, 31 Декабря 2011, 00:08 | Сообщение # 27 |
Злостный админ
Группа: Администраторы
Сообщений: 3018
Репутация: 71
Награды: 28
Статус: Offline
| Приложил проект - он работает у Вас?
Да, кстати! Версия MMB последняя стоит, я надеюсь?
Добавлено (31 Декабрь 2011, 00:08) --------------------------------------------- Quote (YURIY) Да, кстати! Версия MMB последняя стоит, я надеюсь?
Всё ясно. Вижу - Ваш проект более старой версии. Вы ж читайте внимательно в справке - эти 1000 таймеров были введены в последней версии! До этого, то есть - в Вашем варианте, их нужно обзывать A, B, C (см. help). А лучше скачать новую.
Вечная память Андрею Сергееву!
|
|
| |
Oleg_88 | Дата: Суббота, 31 Декабря 2011, 02:55 | Сообщение # 28 |
Любопытный
Группа: Пользователи
Сообщений: 33
Репутация: 0
Награды: 0
Статус: Offline
| Да у меня уже очень долго 4.9.7 стоит, у себя тоже исправил на буквы и всё пошло, спасибо.
|
|
| |