|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
[Вопрос] Как реализовать обработчик некоторого количества таймеров?
Здравствуйте!
У меня есть динамический список заданий, в каждом задании задан интервал через который это задание должно быть исполнено. Проблема - так как изначально количество заданий неизвестно то таймеры нужно создавать во время исполнения программы. Вопрос такой - как лучше реализовать поставленную задачу? Была идея каждый таймер называть так "имя+номер задания" а потом в единственном (для всех таймеров) обработчике событий считывать Sender'ом это имя, вырезать номер и исполнять нужное задание с этим номером. Выходит немного монструозно =) Есть какие то идеи как это реализовать другим, менее извращенным способом? Заранее спасибо! |
#2
|
||||
|
||||
все это делается с помощью одного таймера...
|
#3
|
|||
|
|||
Можно пожалуйста по подробнее?
|
#4
|
||||
|
||||
1. по варианту ТС: у таймера тоже есть свойство Tag
2. по предложеному: один таймер проверяет какие задания из списка необходимо запустить сейчас, естественно для каждого задания нужно хранить время его последнего запуска - если разница между настоящим больше или равна интервалу запуска, то запускаем Пишу программы за еду. __________________ |
#5
|
|||
|
|||
Тип списка какой?
Если TObjectList - то добавить к каждому объекту по таймеру, если не TObjectList - то сделать через TObjectList. |
#6
|
||||
|
||||
Цитата:
Обычная таблица: Код:
var ax:array[0..100,0..2] of integer; a[11,0] - длительность задания a[11,1] - секунда начала a[11,2]:=a[11,1] +a[11,0] - секунда конца ( вычисляем заранее, чтобы не выполнять лишних операций) Далее в событии онтаймер for i:=1 to 100 do begin if a[i,2]= Текущая_секунда then завершить if a[i,2]= Текущая_секунда then начать задание end; Минус в том что каждую секунду придется проверять все задания. Помогаю платно. Помогаю иногда бесплатно. |
#7
|
|||
|
|||
мне тоже думается что одним таймером можно сделать, но при желании можно сделать и чтобы каждый таймер знал только своё задание
|
#8
|
|||
|
|||
Эм, извиняюсь, не точно поставил вопрос.
Код:
type TTask=array[1..10] of string; TTaskList=array[1..100] of TTask мне нужно к каждому элементу массива TTaskList "прикрутить" таймеры чтоб они через заданий промежуток времени(для каждого таймера разный) обрабатывал по очереди элементы своего массива TTask, как лучше это сделать? |
#9
|
||||
|
||||
Что мешает использовать record?
Код:
type TTask = record Task : array[0..9] of string; Timer : TTimer; end; var TaskList : array[0..99] of TTask; Je venus de nulle part 55.026263 с.ш., 73.397636 в.д. |
#10
|
|||
|
|||
Код:
TMyTask = class(TObject) public FTask : array[1..10] of string; FTimer : TTimer; procedure OnTimer(Sender : TObject); constructor Create(AInterval : integer); destructor Destroy; end; procedure TMyTask.OnTimer(Sender : TObject); begin ... FTask ... end; constructor TMyTask.Create(AInterval : integer); begin inherited Create; FTimer := TTimer.Create; FTimer.Interval := AInterval; FTimer.OnTimer := OnTimer; // FTimer.Enable := True; end; destructor Destroy; begin FTimer.OnTimer := nil; FTimer.Free; inherited Destroy; end; ... var List : TObjectList; ... procedure ... var Tmp : TMyTask; begin Tmp := TMyTask.Create(interval); Tmp.FTask := ... Tmp.FTimer.Enabled := True; ... List.Add(Tmp) ... end; ... |