ttime delphi



Автор Ann Php задал вопрос в разделе Другие языки и технологии

Организовать кнопку прервать в Delphi и получил лучший ответ

Ответ от Василий[гуру]
Заведите глобальную переменную, например NeedStop: Boolean;
var
Form1: TForm1;
NeedStop: Boolean;
implementation
{$R *.dfm}
procedure TForm1.bOKClick(Sender: TObject);//кнопка с действиями
var
I: Integer;
begin
NeedStop := False;
for I := 0 to 10000 do
begin
Label1.Caption := IntToStr(I);
{...
другие операции
...}
Application.ProcessMessages();
if (NeedStop) then
Break;
end;
end;
procedure TForm1.bStopClick(Sender: TObject);//кнопка для прерывания
begin
NeedStop := True;
end;

Ответ от Linus Torvald's[гуру]
Википедия -> оптимизация

Ответ от Yagami Light[гуру]
//взято из http:// . ru/ delphi/thread11888. html
procedure pause(p:byte); // p - пауза в секукндах
var pa1:ttime;
begin
pa1:=encodetime(0,0,p,0)+time;
repeat
application.processmessages;
sleep(10);
until time>=pa1;
end;
///////////////////////////////////////////////////////////////
Насчет прерывания: в строке until укажи дополнительное условие until (time>=pa1) and (boo);
// boo:boolean;
При нажатии кнопки запуска просто присвой ложь boo, а при нажиме на кнопку остановки - истину, и все!
З. Ы. И вообще, совет - ищи истину на специальных форумах, там знающих людей больше на порядок)

Ответ от -Egor-[гуру]
Если ты заведёшь цикл в основном потоке (те на самой форме ) то в события, на нажатия кнопки прервать, реакции от системы не поступит . Поэтому читай как работать с различными потоками, или заюзай таймер, или осуществляй цикл на другой форме

Ответ от ??? ?????????[гуру]
Если свою длительную процедуру вставляешь в обработчик события кнопки, то ничего не спасет. Форма будет висеть до тех пор, пока не завершиться обработчик события кнопки. И реагировать программа ни на что не будет, в том числе и на нажатия других кнопок. Длительные процедуры нужно запускать в отдельном потоке. Обработчик события кнопки запускает новый поток, и на этом завершается, программа может работать далее, реагируя на все остальные события.
Чтобы прервать эту процедуру необходима синхронизация потоков. Сам поток в ходе выполнения длительных действий должен проверять событие остановки. А кнопка прервать - устанавливать это событие.
Всякие глобальные переменные не помогут при отсутствии многопоточности и отсутствии синхронизации потоков.
Таймеры - это вообще полный бред, совершенно из другой оперы.
PS для справки: событие - это объект ядра. Учи про потоки, про события (CreateThread, CreateEvent, и так далее)

Ответ от 3 ответа[гуру]
Привет! Вот подборка тем с похожими вопросами и ответами на Ваш вопрос: Организовать кнопку прервать в Delphi
 

Ответить на вопрос:

Имя*

E-mail:*

Текст ответа:*
Проверочный код(введите 22):*