Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.01.29;
Скачать: CL | DM;

Вниз

Интерактивонсть.   Найти похожие ветки 

 
NiGGa ©   (2005-12-22 15:32) [0]

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


 
evvcom ©   (2005-12-22 15:37) [1]

а оно и не должно прорисовываться в доп. потоке.
Что значит "поиграться"?


 
Digitman ©   (2005-12-22 15:39) [2]

Тот самый доп.поток "с вычислениями" может периодически или эпизодически средствами Postmessage() посылать окну (с прогресс-баром) некое предопределенное сообщение с параметрами, определяющими требуемое состояние програсс-бара

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


 
NiGGa ©   (2005-12-22 15:44) [3]

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

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


 
NiGGa ©   (2005-12-22 15:45) [4]

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


 
Zeqfreed ©   (2005-12-22 15:50) [5]

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


 
Digitman ©   (2005-12-22 15:50) [6]


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


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

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

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


 
NiGGa ©   (2005-12-22 15:51) [7]

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


 
Leonid Troyanovsky ©   (2005-12-22 15:54) [8]


> NiGGa ©   (22.12.05 15:32)  

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


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

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

--
Regards, LVT.


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

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


 
Anatoly Podgoretsky ©   (2005-12-22 15:55) [10]

TAnimate


 
NiGGa ©   (2005-12-22 15:57) [11]

[6] Digitman ©   (22.12.05 15:50)

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

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


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


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


кому ?


 
Digitman ©   (2005-12-22 16:07) [13]


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


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

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


 
NiGGa ©   (2005-12-22 16:07) [14]

[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:11) [15]


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


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


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

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

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


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

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

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

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

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


 
evvcom ©   (2005-12-22 16:28) [17]


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

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


 
Digitman ©   (2005-12-22 16:37) [18]


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


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

обоснуй ...


 
NiGGa ©   (2005-12-22 18:06) [19]

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

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


 
Digitman ©   (2005-12-22 18:11) [20]


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


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


 
NiGGa ©   (2005-12-22 18:17) [21]

:)
скорее в 62


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

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


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


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


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

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

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



Страницы: 1 вся ветка

Текущий архив: 2006.01.29;
Скачать: CL | DM;

Наверх




Память: 0.53 MB
Время: 0.038 c
15-1136762101
iZEN
2006-01-09 02:15
2006.01.29
Mind map, или Научите себя думать.


4-1132553095
AndreyK
2005-11-21 09:04
2006.01.29
Отслеживание очереди печати


2-1137248183
M_Alex
2006-01-14 17:16
2006.01.29
массив


3-1133362541
vl
2005-11-30 17:55
2006.01.29
о параметрах в хр. процедуре


9-1121634452
LexaDup
2005-07-18 01:07
2006.01.29
Линия видимости в GLSCene