Форум: "Начинающим";
Текущий архив: 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