Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Интерактивонсть. [D7, Win2k]


Страницы:   1 2

NiGGa ©   (2005-12-22 15:32:00) 

Доброго времни суток.
Собственнозадача простая. Но как-то красивое решение не приходит.
Есть поток выполняющий длительные вычисления. прогресс выполнения задачи тяжело определяется, потому пользователю в это время предоставляется погиратся окошком с прогрессбаром "бесконечным". Вопрос в том как постоянно прорисовывать это окошко, при условии что желательно эти процедуры нек помещать в тело потока с вычислениями.


Digitman   (2005-12-23 08:31:00) [1]


> той нижней форме передавался фокус


а почему бы ему не передаваться ?

StayOnTop этому никак не препятствует.

Для этого существует модальныйрежим показа формы - Form.ShowModal


NiGGa   (2005-12-22 18:24:00) [2]

Как-то раз я таки в событии таймера поставил не отрисвоку формы, а Apllication.ProcessMessages. И форма отзывалась на пользовательские действия, но имел место артефакт такой, что хоть форма интерактива и FormStyle := fsStayOnTop, при клике мышкой на форму, что под ней, той нижней форме передавался фокус.


NiGGa   (2005-12-22 18:17:00) [3]

:)
скорее в 62


Digitman   (2005-12-22 18:11:00) [4]


> проблема только в том что ее "потягать" нельзя


значит. у тебя ошибка в 17-й строке


NiGGa   (2005-12-22 18:06:00) [5]

это почему же ?

обосновать могу только полученными практически результатами. У меня анимация и прочие контролы формы и сама форма прорисовывается, с этим все отлично, проблема только в том что ее "потягать" нельзя. К тому же применение ее(такой формы) без доп.потока(доп. он только по названию. это по сути поток с вычислениями), т.к. не для всех вычислений создаю отдельный поток, немного затруднительно.


Digitman   (2005-12-22 16:37:00) [6]


> Наличие анимации, действительно создает вид, но не дает
> возоможности "игратся" с окном


это почему же ?

обоснуй ...


evvcom   (2005-12-22 16:28:00) [7]


> Ставить мелкий приоритет на поток тоже не хочется ввиду
> сильно большой жертвой времени выполнения ради интреактива.

А мелкий приоритет совсем не означает, что этому потоку будет выделяться малое количество процессорного времени. Даже с минимальным приоритетом ты не увидишь в TaskManager, что процессор простаивает, он будет нагружен на 100%. А основной поток получит право незамедлительного реагирования на баловство пользователя.


NiGGa   (2005-12-22 16:13:00) [8]

Я прошу прощения, плохо сформулировал видимо задачу.

Вычислениям нужно много ресурсов, потому получается, что на отрисовку формы они выделяются крайне редко, или вообще не выделяются во время работы потока с вычислениями. Постоянной отрисовки формы нет = нет интерактива(от закакзчика).

Ставить мелкий приоритет на поток тоже не хочется ввиду сильно большой жертвой времени выполнения ради интреактива.

[13] Digitman
Пользователю хочется что-бы форму можна было еще потягать, работа у них нервная, а это успокаивает. Наличие анимации, действительно создает вид, но не дает возоможности "игратся" с окном. И "жалко" как-то отказать заказчику в такой маленькой слабости :)


Digitman   (2005-12-22 16:11:00) [9]


> NiGGa ©   (22.12.05 16:07) [14]


> Повнимательней пожалйста прочтите второй абазц [3].


то что внедриться в код доп.потока ты не имеешь возможности - это я понял.

у тебя единственный выход - гонять по кругу прогресс-бар

на то есть таймер, рандомная ф-ция и прочие прибабахи, которые управляя св-вом Position того самого прогресс-бара позволят сымитировать для юзера "бурную деятельность" аппликации


NiGGa   (2005-12-22 16:07:00) [10]

[8] Leonid Troyanovsky ©   (22.12.05 15:54)
Никакие прогрес-бары здесь не помогут, потому, что, собс-но,
нет никакой информации о проценте выполнения задачи.


Как было сказано прогрес-бар рисуется "бесконечным", это делается потому-что заказчику хочется интерактива. Он должен видеть что "что-то происходит".

[9] Digitman ©   (22.12.05 15:54)
Повнимательней пожалйста прочтите второй абазц [3].

[10] Anatoly Podgoretsky ©   (22.12.05 15:55)
Пробовал. Но у меня в процессе вычислений на форме отрисовывается только анимация, и больше ничего. Там еще хотелось бы иметь лейбл с надписью о количестве прошедшего времени.
и как заметил Digitman[2] бестлковому юзеру таки хочется судорожно потягать окошко :)


Digitman   (2005-12-22 16:07:00) [11]


> нет возможности


тебе же А.П. сказал - ИМИТИРУЙ активность приложения любой анимацией !
пусть даже и не отражающей действительность ..

юзеру ж важно другое : аппликация что-то там делает и не зависла ..


Digitman   (2005-12-22 16:03:00) [12]


> асихнронные сообщения могут придти тогда, когда они уже
> не нужны по сути


кому ?


NiGGa   (2005-12-22 15:57:00) [13]

[6] Digitman ©   (22.12.05 15:50)

Собственно асихнронные сообщения могут придти тогда, когда они уже не нужны по сути.

И главная задача в том, что нет возможности модификации кода вычислений, т.е. вставить меж строк в цыкле ПостМессаге и тому подобное, не имею возможности.


Anatoly Podgoretsky   (2005-12-22 15:55:00) [14]

TAnimate


Digitman   (2005-12-22 15:54:00) [15]

способы тебе уже подсказаны - один поток посылает сообщение и едет дальше, другой получив это сообщение обновляет состояние прогресс-бара


Leonid Troyanovsky   (2005-12-22 15:54:00) [16]


> NiGGa ©   (22.12.05 15:32)  

> Собственнозадача простая. Но как-то красивое решение не


Все тяжелые вычисления выводятся в отдельный процесс.
По окончанию которых он об этом извещает запустившего.

Никакие прогрес-бары здесь не помогут, потому, что, собс-но,
нет никакой информации о проценте выполнения задачи.

--
Regards, LVT.


NiGGa   (2005-12-22 15:51:00) [17]

Вопрос смысла уже решен, не ясны саособы реализации.


Digitman   (2005-12-22 15:50:00) [18]


> Если сообщение сделанное постом будет долго идти? а SendMessage
> уже не красивое решение


какая нафих разница ?

SendMessage - синхронный вызов, PostMesssage - асинхронный.

Другой вопрос, что при "нагруженности" потока-приемника синхронный вызов будет "висеть" до тех пор пока поток-пириемник не сподобится обрпаботать сообщение. в то время как асинхронный вызом действует по принципу "плюнул и поехал дальше"


Zeqfreed   (2005-12-22 15:50:00) [19]

NiGGa ©   (22.12.05 15:32)
Возможно, есть смысл реализовать лишь индикатор того, что процесс идет, без явного указания выполненной доли операции. Например, такой, который можно наблюдать при загрузке Windows XP.


NiGGa   (2005-12-22 15:45:00) [20]

Это по сути есть некое подобие Експрореровского прогресс-бара, который рисуется, но информативностью не обладает :)


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо