Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562

Как сделать таймер?

09.02.2011, 13:26. Показов 7137. Ответов 14
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как сделать таймер? Сайт не игровой и никаких преимуществ от взлома таймера никто не получит, а если кто то получит туже инфу быстрее, то пусть потом попробует её быстрее прочитать и осмыслить. Поэтому дублирующий php таймер просьба не предлагать. Да и сайт на народе, там, на сколько мне известно, php просто нет.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.02.2011, 13:26
Ответы с готовыми решениями:

Как сделать таймер обратного отсчёта по нажатию на кнопку и сделать её неактивной
Снова пишу сюда, ибо нигде больше помощи не дождёшься:( Мне тут нужно сделать такую штуку: чтобы при нажатии на кнопку сработал таймер...

Как же сделать? Таймер
Имеется таймер <script type="text/javascript"> var Timer; var TotalSeconds; function CreateTimer(TimerID, Time) { Timer =...

как сделать часы и таймер?
изучая php наткнулся на такую проблему вывести на экран значения переменных и даты не сложно но как сделать так чтобы они обновлялись...

14
 Аватар для Kdn
307 / 165 / 25
Регистрация: 07.02.2011
Сообщений: 319
09.02.2011, 15:00
Код реализован в ExtJS.

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
var TaskRunner = function(interval){
    interval = interval || 10;
    var tasks = [], 
        removeQueue = [],
        id = 0,
        running = false,
 
        stopThread = function(){
            running = false;
            clearInterval(id);
            id = 0;
        },
 
        startThread = function(){
            if(!running){
                running = true;
                id = setInterval(runTasks, interval);
            }
        },
 
        removeTask = function(t){
            removeQueue.push(t);
            if(t.onStop){
                t.onStop.apply(t.scope || t);
            }
        },
        
        runTasks = function(){
            var rqLen = removeQueue.length,
                now = new Date().getTime();                             
        
            if(rqLen > 0){
                for(var i = 0; i < rqLen; i++){
                    tasks.remove(removeQueue[i]);
                }
                removeQueue = [];
                if(tasks.length < 1){
                    stopThread();
                    return;
                }
            }           
            for(var i = 0, t, itime, rt, len = tasks.length; i < len; ++i){
                t = tasks[i];
                itime = now - t.taskRunTime;
                if(t.interval <= itime){
                    rt = t.run.apply(t.scope || t, t.args || [++t.taskRunCount]);
                    t.taskRunTime = now;
                    if(rt === false || t.taskRunCount === t.repeat){
                        removeTask(t);
                        return;
                    }
                }
                if(t.duration && t.duration <= (now - t.taskStartTime)){
                    removeTask(t);
                }
            }
        };
        
    this.start = function(task){
        tasks.push(task);
        task.taskStartTime = new Date().getTime();
        task.taskRunTime = 0;
        task.taskRunCount = 0;
        startThread();
        return task;
    };
 
    this.stop = function(task){
        removeTask(task);
        return task;
    };
 
    this.stopAll = function(){
        stopThread();
        for(var i = 0, len = tasks.length; i < len; i++){
            if(tasks[i].onStop){
                tasks[i].onStop();
            }
        }
        tasks = [];
        removeQueue = [];
    };
};
Пример использования:

JavaScript
1
2
3
4
5
6
7
8
9
var writeClock = function(){ //функция для выполнения
    //код функции
} 
var task = {
    run: writeClock,
    interval: 1000 //1 секунда
}
var runner = new TaskRunner();
runner.start(task);
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
10.02.2011, 05:26  [ТС]
То есть это потоком делается? А как остановить таймер?
0
 Аватар для Kdn
307 / 165 / 25
Регистрация: 07.02.2011
Сообщений: 319
10.02.2011, 09:50
taras atavin, Напишу как написано в документации:
Предоставляет возможность выполнять одну или несколько произвольных задач многопоточным методом.
То есть здесь. Сам runner имеет интервал обновлений, а для выполнения задач используется сравнение времени с интервалом самой задачи. Если необходимый интервал задачи достигнут, значит она выполняется, если же нет, то соответственно следующий цикл ожидания.

Остановить можно так:

JavaScript
1
2
3
4
5
runner.stop(task); //останавливется указанное задание
 
//или так
 
runner.stopAll(); //останавливаются все задания
0
Почетный модератор
 Аватар для Humanoid
11557 / 4352 / 452
Регистрация: 12.06.2008
Сообщений: 12,454
10.02.2011, 11:10
Как у вас всё сложно.
JavaScript
1
2
3
4
5
function MyTimer()
{
 // какое-то действие, которое нужно выполнять каждые 100 мс.
}
var t = setInterval(MyTimer,100); // после этого каждые 100мс будет вызываться функция MyTimer
Что бы остановить, достаточно вызвать
JavaScript
1
clearInterval(t); // t - это номер таймера, который возвращает функция setInterval
Так же можно использовать setTimeout и clearTimeout.... это всё тоже самое с той разницей, что setTimeout вызовет функцию только один раз, а setInterval будет её вызвать до тех пор, пока её не остановят.
2
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
10.02.2011, 13:53  [ТС]
Humanoid, интервал в миллисекундах?
0
БТР - мой друг
 Аватар для Hagrael
333 / 277 / 47
Регистрация: 07.01.2010
Сообщений: 1,932
10.02.2011, 14:24
taras atavin, да.
0
 Аватар для Vovan-VE
13210 / 6599 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
10.02.2011, 15:01
Цитата Сообщение от Kdn Посмотреть сообщение
Предоставляет возможность выполнять одну или несколько произвольных задач многопоточным методом.
О_о JavaScript в одном потоке выполняется. Многопоточность отсутствует, как таковая.
0
 Аватар для Kdn
307 / 165 / 25
Регистрация: 07.02.2011
Сообщений: 319
10.02.2011, 15:10
Vovan-VE, Конечно всё выполняется последовательно.Тут имеется ввиду наверное псевдо многопоточность. Один таймер, много заданий.
Вот как в оригинале написано:
Provides the ability to execute one or more arbitrary tasks in a multithreaded manner
1
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
11.02.2011, 06:41  [ТС]
Локальные подоконники тоже могут быть многопоточными даже на однопроцессорной и одноядерной машине. Исполнение на самом деле последовательное, но между потоками существует разделение времени. И что такое многопоточность? Это возможность приладе самой быть многозадачной. Так вот, для пользователя это вполне имитируется даже в MS DOSе. Может быть имеется ввиду такая же многопоточность: с точки зрения системы поток один, а с точки зрения самого скрипта несколько функций выполняются логически параллельно?
0
 Аватар для Kdn
307 / 165 / 25
Регистрация: 07.02.2011
Сообщений: 319
11.02.2011, 09:55
Многопото́чность — свойство платформы или приложения, состоящее в том, что процесс, порождённый в операционной системе, может состоять из нескольких потоков, выполняющихся «параллельно», то есть без предписанного порядка во времени. При выполнении некоторых задач такое разделение может достичь более эффективного использования ресурсов вычислительной машины.
Если рассматривать код, то таймер сравнивает текущее время с временем, когда задание выполнялось последний раз, и если интервал, указанный в задании достигнут, то задание выполняется. Но многопоточночти здесь никакой нет. Не выполняется основное условие то есть без предписанного порядка во времени. Все задания выполняются последовательно и пока не выполниться одно задание, следующее задание не может быть запущено на выполнение.
Так что многопоточности реально никакой нет и в JS быть не может (во всяком случае пока что).
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
11.02.2011, 11:57  [ТС]
Цитата Сообщение от Kdn Посмотреть сообщение
Многопото́чность — свойство платформы или приложения, состоящее в том, что процесс, порождённый в операционной системе, может состоять из нескольких потоков
Способность системы выполнять как бы параллельно несколько программ - многозадачность, а многопоточной быввает запущенная на этой системе программа, если уже её части выполняются как бы параллельно. Перевод из книги Чарлза Петзолдта
Многопоточность - возможность программы самой быть многозадачной
. Конечно, реализуется системой, но для каждого отдельного приложения. И про имитацию ты пропустил? Таймер вызывает задачи последовательно? А что мешает каждой задаче выполнить маленький шажок и вернуть управление, а потом вызывается следующая? Я таким образом имитировал потоки под DOSом. И параллельно - это не без порядочно, а одновременно. То есть каждый поток выполняется последовательно, но одновременно с точки зрения прилады с каждой его операций выполняются операции остальных потоков. На самом деле одновременности нет, а есть режим разделения времени. И ты забываешь, что скипт - нет прилада, а макрос и выполняется приладой, а не системой. Многозадачные и поддерживающие многопточность системы сами выполняются последовательно (по крайней мере, на одноядерных компах), а для прилад имитируют параллельность. Кто принципиально мешает браузеру функционировать подобным же образом? Можно, кстати, всего лишь генератором псевдослучайных чисел перемешать и фактический порядок операций разных псевдопотоков. Да и самому скрипты кто мешает имитировать для пользователя одновременное выполнение нескольких протяженных во времени неэлементарных операций?
0
 Аватар для Kdn
307 / 165 / 25
Регистрация: 07.02.2011
Сообщений: 319
11.02.2011, 12:44
taras atavin, Я не спорю что можно имитировать многопоточную работу. Эта имитация будет только внутри браузера. Браузер как получал часть процессорного времени на выполнение так и будет получать его ни больше ни меньше.
В плане теории да интересно порассуждать на эту тему. Но на практике от этого никакой пользы.
Во первых скорость выполнения никак не уменьшится, потому что поток физически для браузера один.
Во вторых сложность разработки: как определить состояние задачи на момент временного выхода для передачи управления. Добавление новых переменных, увеличение объёма используемой памяти.

taras atavin, ты чего так углубился в эту тему?
0
 Аватар для taras atavin
4226 / 1796 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
11.02.2011, 13:19  [ТС]
Цитата Сообщение от Kdn Посмотреть сообщение
Во первых скорость выполнения никак не уменьшится
может не увеличится?
0
 Аватар для Kdn
307 / 165 / 25
Регистрация: 07.02.2011
Сообщений: 319
11.02.2011, 15:06
taras atavin, имел ввиду время выполнения.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.02.2011, 15:06
Помогаю со студенческими работами здесь

Сделать таймер JS
Здравствуйте, помогите сделать таймер обратно отчета с действием переноса на другой сайт Есть код который отчитывает время, вот когда он...

Как остановить таймер?
В одном из методов запускаю таймер командой. a1 = setTimeout(Change, tt * 500); При нажатии на кнопку запускается функция в которой этот...

Как поставить таймер на сайт
Как поставить вот этот таймер на сайт? все делал, а он не работает. http://bitby.net/timer-for-site.html Добавлено через 31 минуту ...

Как привязать таймер к кнопке
Как реализовать привязку начала отсчета времени по нажатию на кнопку? Есть страница с кнопкой получения бонуса, после нажатия которая...

Таймер на javascript. Как изменить под себя?
День добрый. Нашел скрипт. Но я взял его с сайта рабочего и там на таймере написано 12 лет 10 месяцев 22 дней 3 мин 2 сек - то есть просто...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

Новые блоги и статьи
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
SDL3 для Web (WebAssembly): Работа со звуком через SDL3_mixer
8Observer8 08.02.2026
Содержание блога Пошагово создадим проект для загрузки звукового файла и воспроизведения звука с помощью библиотеки SDL3_mixer. Звук будет воспроизводиться по клику мышки по холсту на Desktop и по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru