![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проблема с таймером
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]Почему нельзя использовать стандартный компонент?