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

Вниз

Как запустить процесс ровно на 10 сек   Найти похожие ветки 

 
Yuraz ©   (2003-10-15 10:59) [0]

Т.е. по таймеру(Timer1) запускаю, но не знаю, как узнать истечение 10сек, а после как опять отрубить этот таймер?
Процесс такой:
(который у меня равен 10 сек... который собственно и не знаю как сделать) запускаем другой таймер(Timer2), который и выполняет мою задачу. По истечении 10сек нужно прекратить выполнение (Timer2).
Заранее спасибо.


 
Holy ©   (2003-10-15 11:04) [1]

GetTickCount и меряй прошли или нет...


 
gek ©   (2003-10-15 11:05) [2]

const
count:word=0;
begin
inc(count);
if count > 10 then
begin
enabled:=false;
count:=0;
end;


 
Skier ©   (2003-10-15 11:06) [3]


> Т.е. по таймеру(Timer1) запускаю, но не знаю, как узнать
> истечение 10сек, а после как опять отрубить этот таймер?
>

TTimer.Interval := 10000; (10сек)
-OnTimer(...)
-Enabled


 
Кабан   (2003-10-15 11:06) [4]

вынеси вычисления в отдельный поток и запускай/останавливай как тебе вздумается


 
Holy ©   (2003-10-15 11:18) [5]

c:=GetTickCount; // Инициализация счктчика времени
Timer1.Enable:=True; // Запуск таймера
Repeat
// Делаем что-то
Until GetTickCount-c>=10000; // Время измеряется в милисекундах
Timer1.Enabled:=False;


 
Yuraz ©   (2003-10-15 11:24) [6]

Спасибо всем ответившим!
Что то не могу сообразить ... GetTickCount тоже не врублюсь, как его использовать в моём случае, потоки тоже не требуется, тем более тут всё однопоточно, в моём случае... лишь бы форма не вешалась.. но она не должна вешаться.
На форме 2 таймера и одна кнопка. При нажатии на кнопку запускается 1 таймер на 10 сек, и пока он работает, работает 2 таймер, с выполнением через заданный промежуток времени, например через 500мс. Причем, при повтороном нажатии на кнопку, если работает 1 таймер (или 2й, что = 1му), 1й таймер устанавливается в ноль, и работает сначала. Вот такая задача ... Немогу сам написать :(


 
Yuraz ©   (2003-10-15 11:28) [7]

Holy © (15.10.03 11:18)
Спасибо!
Только форма "виснет" на время работы, а вот если это сделать с 2мя таймерами, виснуть не будет? Или я не прав?


 
Brahman ©   (2003-10-15 11:35) [8]

Yuraz © (15.10.03 11:24) [6]
Немогу сам написать :(

Может и не надо ?

А иначе включи мозг, особенно ту часть, где логика сосредоточена.
См. Skier © (15.10.03 11:06) [3]


 
Yuraz ©   (2003-10-15 11:36) [9]

Сделал так, нравится!

procedure TForm1.Button2Click(Sender: TObject);
var
c:DWORD;
begin
c:=GetTickCount;
Timer2.Enabled:=True;
Repeat
Application.ProcessMessages;
Until GetTickCount-c>=4000;
Timer2.Enabled:=False;
Shape2.Brush.Color := clGreen;
end;

procedure TForm1.Timer2Timer(Sender: TObject);
begin
Shape2.Brush.Color := clLime;
end;


 
Holy ©   (2003-10-15 11:38) [10]

В цикле работы поставь Application.ProcessMessage


 
Brahman ©   (2003-10-15 11:45) [11]

Ну и слава богу..
Но подумай о
Skier © (15.10.03 11:06) [3]

procedure TAForm.Timer1Timer(Sender: TObject); // 10 sec
begin
Shape1.Brush.Color := clLime;
Timer1.Enabled:=False;
end;

procedure TAForm.Button1Click(Sender: TObject);
begin
Shape1.Brush.Color := clRed;
Timer1.Enabled:=True;
end;


 
Юрий Зотов ©   (2003-10-15 11:55) [12]

В дополнительном потоке:

procedure TMyThread.Execute;
var
SI: TStartupInfo;
PI: TProcessInformation;
Code: DWORD;
begin
ZeroMemory(@SI, SizeOf(SI));
SI.cb := SizeOf(SI);
if CreateProcess(..., SI, PI) then
begin
CloseHandle(PI.hThread);
if WaitForSingleObject(PI.hProcess, 10000) = WAIT_TIMEOUT then
TerminateProcess(PI.hProcess, Code);
CloseHandle(PI.hProcess)
end
end;

В основном потоке:

procedure TForm1.StartButtonClick(Sender: TObject);
begin
with TMyThread.Create(True) do
begin
FreeOnTerminate := True;
OnTerminate := OnTerminateHandler;
Resume
end
end;

procedure TForm1.OnTerminateHandler(Sender: TObject);
begin
ShowMessage("OK")
end;

И все. И не надо никаких таймеров и никаких ProcessMessages.



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

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

Наверх




Память: 0.5 MB
Время: 0.034 c
3-89143
Ru
2003-10-07 11:55
2003.10.27
Пара вопросов по InterBase


6-89430
Support1
2003-08-28 22:26
2003.10.27
Как скачать заголовки новостей с сайта и еще ...


14-89565
Yakudza
2003-10-07 22:00
2003.10.27
Совет !


4-89644
ShadoWFM
2003-08-20 19:54
2003.10.27
Непонятная функйия


4-89647
_san_
2003-08-20 17:12
2003.10.27
ожидание события