Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.11.16;
Скачать: CL | DM;

Вниз

Вопрос про TTimer.   Найти похожие ветки 

 
vegarulez ©   (2008-10-09 08:05) [0]

Доброго времени суток всем мастерам!
Вопрос такой, есть Timer ,у которого есть какой-то интервал допустим 120000 милисекунд. Как узнать на какой он сечас милисекунде отсчёта, и как поменять это значение?


 
Василий Жогарев ©   (2008-10-09 08:13) [1]

FormatDateTime("hh:mm:ss.zzz", Now), но я подозреваю что я вас не понял.


 
Palladin ©   (2008-10-09 08:13) [2]

никак


 
vegarulez ©   (2008-10-09 08:17) [3]

Palladin ©   (09.10.08 08:13) [2]
Обыдно...
Тогда просто завести переменную? Чтобы она была inc по таймеру который имеет интервал 1000 милисекунд допустим.И к ней обращаться...  И её менять?...

з.ы. Просто я сечас так делаю. Думал может сразу можно с таймером работать.


 
Сергей М. ©   (2008-10-09 08:28) [4]


> может сразу можно с таймером работать


Можно и с таймером.
Но не нужно.


> интервал 1000 милисекунд допустим.И к ней обращаться...
>  И её менять


Именно так.
Только зачем ее менять, если вопрос прозвучал "как узнать" ?
И зачем нужна миллисекундная точность  ?


 
sniknik ©   (2008-10-09 08:43) [5]

> Тогда просто завести переменную? Чтобы она была inc по таймеру
если дело только в том "узнать на какой он сечас милисекунде отсчёта", то inc не нужен, да и таймер тоже, достаточно в переменную сохранить точку отсчёта (системные тики), и в любой момент когда понадобится можно будет посчитать "на какой он сейчас" простой разницей между тиками сейчас и сохранённым значением...  т.е. таймер не нужен. для этого. а что там по задаче которую ты делаешь хз.


 
vegarulez ©   (2008-10-09 09:58) [6]

Сергей М. ©   (09.10.08 08:28) [4]
милисекундная точность не нужна. использую секундную точность

Не... дело в том что у меня переодически каждые 2 минуты запускается поток. И чтобы он не запустил 2,3,... экземпляр потока, пока не закончит свою работу тот 1-ый экземпляр потока, я ввёл 2 переменных. Одна переменная - тригер (integer 0,1). А вторая вермя считает, и запускает поток каждые 2 минуты, если он не запущен, т.е. если тригер равен =0.

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

Поэтому бывает нужно поток запустить именно сечас, не дожидаясь 120-ой секунды цикла. допустим на 101-ой секунде 2-ух минутного цикла. Он отрабатывает, и сбрасывает переменную в 0 секунд, и она опять начинает тикать. Вот собственно...


 
Сергей М. ©   (2008-10-09 10:03) [7]


> не знаю как по другому получить сведения о запущенном мною
> потоке


Какие конкретно ?


 
Palladin ©   (2008-10-09 10:09) [8]


> vegarulez ©   (09.10.08 08:17) [3]
> Palladin ©   (09.10.08 08:13) [2]
> Обыдно...

за долгие годы программирования мне, почему-то, это не понадобилось. не вижу ничего обидного. в чем проблема получить статус потока? телепатирую, что у него (FreeOnTerminate=true)=true, так вот нефиг делать FreeOnTerminate:=True когда тебе от объекта потока нужно получать какую либо информацию. Все логично до нельзя. А когда не логично - нельзя.


 
Сергей М. ©   (2008-10-09 10:10) [9]

Т.е. поток, должен быть запущен либо в любое время по требованию либо не реже 1 раза в 2 минуты, так ?
При этом в любой момент времени допускается работа не более чем одного доп.потока данного класса ?


 
vegarulez ©   (2008-10-09 10:20) [10]

Сергей М. ©   (09.10.08 10:10) [9]
Да. всё верно.


 
Сергей М. ©   (2008-10-09 10:37) [11]

Ну тогда примерно так:

FMyThread: TMyThread = nil;
..
procedure ConditionalStartThread;
begin
 if Assigned(FMyThread) and (WaitForSingleObject(FMyThread.Handle, 1) = WAIT_OBJECT_0) then
   FreeAndNil(FMyThread);
 if not Assigned(FMyThread) then
   FMyThread := TMyThread.Create(..);  //FreeOnTerminate д.б. False !!
end;


Обработчик событий таймера с интервалом тиков = 1 сек:

Inc(Seconds);
if Seconds = 120 or NeedThreadStart(Seconds) then begin
 Seconds := 0;
 ConditionalStartThread;
end;


 
sniknik ©   (2008-10-09 10:53) [12]

каким то сложным путём идёте товарищи...  всего то нужен один простой поток у которого в цикле выполняется действие (то чем сейчас поток занимается), в конце цикла проверка - прошло "время х"? значит новый виток цикла. нет? значит небольшой "слип" (можно "разбитый" на части для проверки терминейта) на время до него.
и все. никакого таймера, ожиданий, множественных созданий/запусков потока, просто стартовал в начале и он сам себя обслуживает, до конца.
конечно если правильно понял, что делается...


 
Anatoly Podgoretsky ©   (2008-10-09 11:42) [13]

> sniknik  (09.10.2008 10:53:12)  [12]

А если подумать? Может и поток не нужен.


 
vegarulez ©   (2008-10-09 14:16) [14]

Anatoly Podgoretsky ©   (09.10.08 11:42) [13]
нужен... индюки вешают приложение.

sniknik ©   (09.10.08 10:53) [12]
поток может вызвать какойнибудь эксцепшн(при работе с инетом) и допустим ликвидироваться. во всяком случае я так делаю.



Страницы: 1 вся ветка

Текущий архив: 2008.11.16;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.017 c
15-1221641107
pushkin42
2008-09-17 12:45
2008.11.16
Вопрос по развертыванию


11-1195632501
dima27
2007-11-21 11:08
2008.11.16
KOL+WINCE+БД


2-1223554456
i
2008-10-09 16:14
2008.11.16
узнать размер файла по http..


15-1221640505
Slider007
2008-09-17 12:35
2008.11.16
С днем рождения ! 17 сентября 2008 среда


15-1221562788
desc
2008-09-16 14:59
2008.11.16
Как в Dll работать с набором данных ?