Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Проблема с таймером


Страницы:   1 2

mr. Eof ©   (2008-03-10 23:22:00) 

Здравствуйте.

Подскажите, как можно запускать в программе выполнение функций по истечению определенного врмени?
Тоесть, мне надо выполнять набор неких действий каждые 10 секунд.

!!! Использовать стандартный компонент таймер я не могу !!!

Я пытался так:
program time;
{$APPTYPE CONSOLE}
//---------------------------------------------
uses Windows, SysUtils, Messages;
//---------------------------------------------
var
Hour1,Min1,Sec1,Hour2,Min2,Sec2: integer;
Time1,Time2: SystemTime;
//---------------------------------------------
begin
 while True do
   begin
     GetLocalTime(Time1);
     Hour1:= Time1.wHour;
     Min1:= Time1.wMinute;
     Sec1:= Time1.wSecond;
     while True do
       begin
         GetLocalTime(Time2);
         Sec2:= Time2.wSecond;
         if (Sec1+10 = Sec2) then
           begin
             writeln(inttostr(Hour1)+':'+inttostr(Min1)+':'+inttostr(Sec1));
             break;
           end;
       end;
   end;
end.


Данный вариант бесспорно хорош)), однако грузит процессор под 100% и тд...
Подскаите выход?


mr. Eof   (2008-03-10 23:51:00) [21]

Да, я согласен.
А как ты думаешь, что будет легче??
Sleep с бесконечным циклом:
 while True do
   begin
     sleep(10000);
     writeln('Bingo!');
   end;


Или SetTimer (рабочего примера пока нет =) ).


DVM   (2008-03-10 23:48:00) [22]

пока у тебя будет цикл, без sleep (или чего то подобного) тебе все равно не обойтись. Иначе цикл будет крутиться максимально быстро и отожрет все процессорное время.


mr. Eof   (2008-03-10 23:41:00) [23]

А что вообще наиболее эввективно (по отношению к ресурсам ПК) использовать?
SetTimer или sleep??


mr. Eof   (2008-03-10 23:35:00) [24]

Да, программа действительно консольная.
Сейчас попробую с SetTimer.
Спасибо всем за ответы!


DVM   (2008-03-10 23:29:00) [25]


> Почему нельзя использовать стандартный компонент?

Потому что очевидно у него консольная программа.


DVM   (2008-03-10 23:28:00) [26]


> Данный вариант бесспорно хорош)), однако грузит процессор
> под 100% и тд...

sleep(1000 или даже 5 или 0) вставь в цикл.


DVM   (2008-03-10 23:25:00) [27]


> Использовать стандартный компонент таймер я не могу

можешь тот, что устанавливается через API функцию SetTimer. Там есть вариант без окон. Через функцию обратного вызова.


Лабух   (2008-03-10 23:25:00) [28]

Почему нельзя использовать стандартный компонент?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо