Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2008.11.16;
Скачать: [xml.tar.bz2];

Вниз

Вопрос про 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.005 c
2-1223030460
Развёртка
2008-10-03 14:41
2008.11.16
Переключение раскладки клавиатуры в TurboPascal


8-1187769846
ZMRaven
2007-08-22 12:04
2008.11.16
Поганое изображение.


6-1195471990
Steep
2007-11-19 14:33
2008.11.16
количество переданной информации


2-1223364754
renex
2008-10-07 11:32
2008.11.16
синхронизация времени с сервером datasnap


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





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский