Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.011 c
1-89301
АлеКс
2003-10-14 07:28
2003.10.27
Чем заменить ProcessMessage


1-89262
romeo
2003-10-14 15:31
2003.10.27
Object Inspector как в Delphi - своими руками.


14-89492
Мазут Береговой
2003-10-09 01:22
2003.10.27
Сегодня праздник! : Календарь рыболова: Сергии Радонежский


1-89386
Пубертанец
2003-10-15 14:25
2003.10.27
Форма - контейнер для Excel


4-89643
ламер
2003-08-21 18:45
2003.10.27
добавить запись в win,ini





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский