Форум: "Основная";
Текущий архив: 2003.10.27;
Скачать: [xml.tar.bz2];
ВнизКак запустить процесс ровно на 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;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.02 c