![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | 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; |
|
#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;
...
|