Страница 1 из 1

таймер

Добавлено: 05 дек 2007, 14:37
darkcoder
Привет
Подскажите как сделать чтобы программа ничего не делала n секунд.
Timer1.Enable:=true;
Timer1.Interval:=1000;
while Timer1.Enable=true do..
Почему сваливается б бесконечный цикл(из цикал не вызывает событие ontimer)?
Как сделать правильно?

Второй вопрос, то же самое только время 'спячки' должно случайно выбираться в диапазоне от 10 до 60 секнуд?
Спасибо!

Re: таймер

Добавлено: 05 дек 2007, 15:38
darkcoder
Почему с использованием такой конструкции окно появляется не сразу а после того как программа отработает то есть через 5 сек?

procedure TForm2.FormCreate(Sender: TObject);
begin
Memo1.Lines.Clear;
Memo1.Lines.Add('1');
sleep(5000);
Memo1.Lines.Add('2');
end;

Так как делать то чтоб правильно было? Может есть рабочий примерчик на TTimer?

Re: таймер

Добавлено: 06 дек 2007, 11:59
Хыиуду
1. Timer.Enabled не сваливается в False по событию OnTimer. Он работает себе и работает, каждую секунду вызывает обработчик OnTimer.
Если нужна случайная спячка от 10 до 60 секунд - это
sleep((random(51)+10)*1000);
Или, извратно
Timer1.Enabled:=true;
Timer1.Interval:=(random(51)+10)*1000;
while Timer1.Enable=true do begin end;
А на OnTimer повесить Timer1.Enabled=false;
2. Повесь это не на FormCreate, а на FormShow. FormCreate вызывается в момент создания формы, но до ее показа. Т. е. пишет в мемо строку, спит 5 секунд, пишет другую строку. После этого обработчик OnCreate заканчивается, и только после этого форма выводится на экран

Re: таймер

Добавлено: 06 дек 2007, 12:56
Duncon
Подобная тема уже обсуждалась, зачем вам глючный Sleep подвешивающий систему - юзайте вот это

Код: Выделить всё

procedure pause;
var
  h: THandle;
begin
  h := CreateEvent(nil, true, false, ' ');
  WaitForSingleObject(h, 10000);
  CloseHandle(h);
end;