Форум: "Прочее";
Текущий архив: 2013.07.21;
Скачать: [xml.tar.bz2];
ВнизКак сделать паузу? Найти похожие ветки
← →
ХХХХХ (2013-02-27 22:36) [0]Имеется самодельный таймер, построенный на GetTickCount. (1 штука в примере)
Обрабатывается в OnIdle.
Но нужно сделать паузу.
Т.е. когда устанавливаю паузу, обновляться ничего не должно.
А как только её убираю - должно произойти продолжение обработки таймера.
Но сложность в том, что во время паузы GetTickCount увеличивается
и происходит преждевременное срабатывание таймера.
Как бы сделать так, чтобы не происходил последний пункт.
var
IsPause: boolean;
n: LongWord;
Store: LongWord;
Interval: LongWord = 3000;
procedure TForm1.ApplicationEvents1Idle(Sender: TObject; var Done: Boolean);
begin
Done:= False;
If (GetTickCount - Store >= Interval) then
begin
Store:= GetTickCount;
Inc(n); // Делаем что-то.
Caption:= IntToStr(n); // Показываем, что сделали.
end;
end;
procedure TForm1.CheckBox1Click(Sender: TObject);
begin
IsPause:= CheckBox1.Checked;
end;
← →
clickmaker © (2013-02-27 22:42) [1]а стандартный таймер чем не устроил?
но если уж хочется пополнить ряды велосипедостроителей, то
IsPause:= CheckBox1.Checked;
if not IsPause then Store := GetTickCount;
← →
ХХХХХ (2013-02-27 22:52) [2]
> clickmaker © (27.02.13 22:42) [1]
>
> а стандартный таймер чем не устроил?
Много объектов со своими интервалами.
← →
ХХХХХ (2013-02-27 22:53) [3]
> clickmaker © (27.02.13 22:42) [1]
Как слишком привязано получается.
Может как нибудь остановить GetTickCount?
Типа:
function GetTicks: LongWord;
begin
Result:= GetTickCount;
end;
← →
имя (2013-02-27 23:01) [4]Удалено модератором
← →
clickmaker © (2013-02-27 23:08) [5]> Много объектов со своими интервалами
procedure TForm1.Timer1Timer(Sender: TObject);
begin
Inc(TotalInterval, Timer1.Interval);
if (TotalInterval mod Obj1.Interval) = 0 then
Obj1.DoSomething;
...
if (TotalInterval mod ObjN.Interval) = 0 then
ObjN.DoSomething;
end;
← →
ХХХХХ (2013-02-27 23:23) [6]
> clickmaker © (27.02.13 23:08) [5]
Тут один и тот же интервал.
Как будет при разном?
← →
clickmaker © (2013-02-27 23:25) [7]> Как будет при разном?
у каждого объекта может быть свой. Одно условие: у таймера минимальный интервал, а у объектов - кратный ему
← →
Jeer © (2013-02-27 23:34) [8]
> clickmaker © (27.02.13 23:08) [5]
Это крах для неокрепшего ума XYZ :)
← →
ХХХХХ (2013-02-28 00:24) [9]
> clickmaker © (27.02.13 23:25) [7]
>
> > Как будет при разном?
>
> у каждого объекта может быть свой. Одно условие: у таймера
> минимальный интервал, а у объектов - кратный ему
Тогда зачем там TTimer?
Получается почти тоже самое, что у меня.
if (TotalInterval mod Obj1.Interval) = 0 then
Может заменить на это:
if (Obj1.Interva >= TotalInterval) then
Ведь может проскочить.
← →
anonims (2013-02-28 09:27) [10]
> Получается почти тоже самое, что у меня.
кроме
OnIdle если нам нечего делать, займем себя и процессор.
OnTimer если нам нечего делать, то подождем и пусть другие программы занимают процессор.
при необходимости timer легко остановить (сделать паузу!) а потом снова также легко включить.
timer1.Enabled:=false;
timer1.Enabled:=false;
вообще говоря
GetTickCount -Store <> Timer.Interval
время работы программы(процесса) <= астрономическое время
(Obj1.Interva >= TotalInterval) ==TRUE !всегда
>у таймера минимальный интервал, а у объектов - кратный ему (т.е. большиЙ).
← →
Jeer © (2013-02-28 09:30) [11]
> Ведь может проскочить.
Что может проскочить?
Inc начнет через 2 считать?
← →
Сергей М. © (2013-02-28 09:32) [12]
> Получается почти тоже самое, что у меня
Не получается.
Логика возникновения OnIdle иная, нежели у OnTimer.
Вчитайся в описание:
OnIdle is called only once, as the application transitions into an idle state. It is not called continuously unless the Done parameter is set to false. Applications that set Done to false consume an inordinate amount of CPU time, which affects overall system performance
Установив Done=false ты мочалишь CPU почем зря, бестолково отнимая драгоценные временнгые кванты у других кодовых потоков в системе.
А при Done=True твой таймер жив пока приложение получает сообщения пользовательского ввода.
← →
ХХХХХ (2013-02-28 20:43) [13]
> Сергей М. © (28.02.13 09:32) [12]
>
>
> > Получается почти тоже самое, что у меня
>
>
> Не получается.
> Логика возникновения OnIdle иная, нежели у OnTimer.
>
> Вчитайся в описание:
Я про то, что OnIdle и OnTimer с 1 мс. - почти одно и то же.
> anonims (28.02.13 09:27) [10]
Вот эта строка:
Inc(TotalInterval, Timer1.Interval);
Напишите мне пример, где используется 2 таких таймера.
Я посмотрю.
← →
clickmaker © (2013-02-28 21:03) [14]а зачем 2 таймера?
← →
Сергей М. © (2013-02-28 22:33) [15]
> Я про то, что OnIdle и OnTimer с 1 мс. - почти одно и то
> же
Это с какого же перепугу ?
← →
Jeer © (2013-02-28 23:05) [16]
> Это с какого же перепугу ?
Чукча.
Ему тут уже много чего наговорили полезного в разных ветках, но чукча не купается с мылом, у него другие методы:)
← →
Сергей М. © (2013-02-28 23:07) [17]
> Jeer © (28.02.13 23:05) [16]
Неужели лыжи ?)
← →
Jeer © (2013-02-28 23:08) [18]Не.. они трутся друг о друга, так и моются:)
Так, что - нужен еще один чукча, как минимум.
← →
Сергей М. © (2013-02-28 23:14) [19]
> Jeer © (28.02.13 23:08) [18]
)
Не знал)
Надо взять на вооружение на случай вселенской мыльно-банно-коммунальной катастрофы)
← →
ХХХХХ (2013-03-01 14:34) [20]
> Jeer © (28.02.13 23:05) [16]
>
>
> > Это с какого же перепугу ?
>
>
> Чукча.
Нацик в треде.
> Сергей М. © (28.02.13 22:33) [15]
>
>
> > Я про то, что OnIdle и OnTimer с 1 мс. - почти одно и
> то
> > же
>
>
> Это с какого же перепугу ?
Что нет?
> clickmaker © (28.02.13 21:03) [14]
>
> а зачем 2 таймера?
Можно и 3.
← →
Сергей М. © (2013-03-01 14:43) [21]
> ХХХХХ (01.03.13 14:34) [20]
Конечно что нет.
← →
clickmaker © (2013-03-01 14:48) [22]> Можно и 3
а зачем? В предложенном мной варианте можно обойтись одним
← →
ХХХХХ (2013-03-01 15:14) [23]> Сергей М. © (01.03.13 14:43) [21]
> ХХХХХ (01.03.13 14:34) [20]
> Конечно что нет.
В данном контексте, вообще не суть.
> clickmaker © (01.03.13 14:48) [22]
>
> > Можно и 3
>
> а зачем? В предложенном мной варианте можно обойтись одним
Я не про TTimer"ы.
А про наши "таймеры".
← →
clickmaker © (2013-03-01 15:24) [24]> [23] ХХХХХ (01.03.13 15:14)
ваши "таймеры" можно сделать на одном TTimer
← →
ыуа (2013-03-02 15:32) [25]ыуа
← →
ХХХХХ_ (2013-03-02 15:32) [26]
> clickmaker © (01.03.13 15:24) [24]
>
> > [23] ХХХХХ (01.03.13 15:14)
>
> ваши "таймеры" можно сделать на одном TTimer
Покажите примером.
← →
clickmaker © (2013-03-02 15:42) [27]> Покажите примером
Приехали... А в [5] что?
← →
ХХХХХ_ (2013-03-02 16:43) [28]Это: Inc(TotalInterval, Timer1.Interval);
Какой у Timer1 интервал?
Не 0?
← →
Inovet © (2013-03-02 17:06) [29]> [28] ХХХХХ_ (02.03.13 16:43)
> Какой у Timer1 интервал?
Какая разница. Выше всё объяснили. Всё равно мелких интервалов ты просто так не получишь, и что важнее - точно вовремя не получишь.
← →
clickmaker © (2013-03-02 17:54) [30]> Какой у Timer1 интервал?
[7] прочитал?
Страницы: 1 вся ветка
Форум: "Прочее";
Текущий архив: 2013.07.21;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.003 c