Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Взаимодействие программы с пользователем во время расчета



Расчеты, использующие методы Монте-Карло, могут занимать от нескольких секунд до значительно большего времени в зависимости от быстродействия компьютера и заданной для расчета статистики. Пока программа считает, пользователя необходимо чем-то занять. Хорошим стилем программирования является подсчет времени, которое требуется программе на расчет одной итерации, и экстраполяция на заданное количество итераций. В этом случае в интерфейсе следует предусмотреть поля для вывода времени начала расчета, времени, требуемого для расчета, которое может обновляться через определенное количество просчитанных итераций, и время окончания расчета. В качестве другого варианта можно использовать компонент Delphi, который называется ProgressBar и находится на вкладке Win32 палитры компонентов среды разработки Delphi. При работе с ProgressBar задается начальное и максимальное значение позиции:

ProgressBar1.Position:= 0;

ProgressBar1.Max:= Stat;

а в расчетном цикле формируется текущее состояние

i:= 0;

while i <= Stat-1 do

begin

if i mod 100 = 0 then

begin

Application.ProcessMessages;

ProgressBar1.Position:=ProgressBar1.Position + 100;

if FlagStop = true then

begin

Stat:= i+1;

Edit3.Text:= IntToStr(Stat);

break;

end;

end;

... {тело цикла}...

inc(i);

end;

При работе с ProgressBar следует иметь в виду, что свойства Position и Max имеют тип integer. Приведенный выше фрагмент кода требует разъяснений. Переменная FlagStop имеет тип boоlean и получает значение true в тот момент, когда пользователем нажата кнопка СТОП, прерывающая расчет. Проверка, нажата ли кнопка СТОП, осуществляется на каждой сотой итерации. В случае завершения расчета или его прерывания результаты расчета нормируются на значение статистики. Если нажата кнопка СТОП, цикл расчета прерывается, значение статистики в этом случае равно количеству посчитанных итераций. Это значение присваивается переменной Stat и визуализируется в поле Edit3.Text. Когда идет расчет – процессор компьютера занят, программа ничего «не видит» и «не слышит». Для того, чтобы прервать вычисления и передать операционной системе управление для просмотра очередей сообщений (нужно увидеть, что нажата кнопка СТОП), используется оператор Application.ProcessMessages на каждой сотой итерации.





Дата публикования: 2014-11-03; Прочитано: 361 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.006 с)...