Главная страница
    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.02 c
14-89576
[lamer]Barmaglot
2003-10-02 11:24
2003.10.27
Как насчет результатов конкурса?


1-89326
GreySerg
2003-10-16 15:20
2003.10.27
Как сделать , чтобы прога была только в tray при её загрузке ?


14-89489
Alexey Lipatov
2003-10-09 17:31
2003.10.27
компилятор компиляторов.


7-89604
mao
2003-08-01 07:05
2003.10.27
Путь до папки windows


1-89375
AlexanderSK
2003-10-15 18:01
2003.10.27
Обмен сообщениями в Service-ах?





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