|
|
|
Проблема с Application.ProcessMessages
|
|||
|---|---|---|---|
|
#18+
grexhide softwarer И в данной конкретной программе все задержки, которые только могут быть, сосредоточены в WM_PAINT это не совсем так. вернее - совсем не так. буфер прорисовки можно формировать в треде - а потом очень быстро (за миллисекунды - одним оператором bitblt) отобразить его в WM_PAINT. поставив критическую сессию, естественно. 1. То, что "можно" никоим боком не относится к данной конкретной программе. В ней задержки сосредоточены именно там, и выносить в тред что-то другое смысла довольно мало. 2. Да, можно. Будет та самая стрельба из пушки по воробьям. Если есть две операции, выполняющиеся за миллисекунды каждая, разносить их в разные потоки - только ухудшать производительность. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2006, 16:21:37 |
|
||
|
Проблема с Application.ProcessMessages
|
|||
|---|---|---|---|
|
#18+
softwarer в отдельных случаях - вполне разумные доводы. просто я хотел сказать примерно то, что применение таймеров - это лишь способ - "незаморачиваться лукаво" на треды, т.е. просто способ быстро сляпаять некий суррогат и не более. о грамотности применения таймеров ни под каким соусом никакой речи быть не может, априори. это не религия, это просто здравый смысл. даже классические операции - делать это раз в пять секунд должны решаться именно тредом - просто потому, что sleep(msec) куда более логичен и малозатратен для системы, чем Timer.Interval Если есть базовая концепция - последовательное выполнение операций, с индикацией прогресса на долгих операциях или "песочными часами", если по другому никак, то любое распареллеливание потока программы должно делать только на механизме тредов - практика их применения не намного сложнее таймеров, при том, что на порядок выигрывает по всем остальным позициям. таймер - это вообще остатки былого "величия" кооперативной модели win16 и наличесвуют просто как дань совместимости. зачем же плодить кривые методы в новых разработках ? (тем более, посмотрите на его реализацию - FWindowHandle, WM_TIMER в т.ч.) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2006, 16:32:24 |
|
||
|
Проблема с Application.ProcessMessages
|
|||
|---|---|---|---|
|
#18+
softwarer 2. Да, можно. Будет та самая стрельба из пушки по воробьям. Если есть две операции, выполняющиеся за миллисекунды каждая, разносить их в разные потоки - только ухудшать производительность. в чем суть выстрела из пушки и в чем суть ухудшения производительности ? в разы ? конкретные цифры ? в том, что обработка WM_TIMER - значительно менее затратное решение, чем TThread и Sleep ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2006, 16:34:51 |
|
||
|
Проблема с Application.ProcessMessages
|
|||
|---|---|---|---|
|
#18+
grexhide таймер - это вообще остатки былого "величия" кооперативной модели win16 и тем более, покажите мне пример именно таймеров в классической модели POSIX ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2006, 16:37:06 |
|
||
|
Проблема с Application.ProcessMessages
|
|||
|---|---|---|---|
|
#18+
grexhide Федор_Федор Это не курсовой. Если человек не шарит в Делфи, то это не значит, что он студент. Верно? редкий аспирант сильно отличается полезностью и технической грамотностью - от студента и от преподавателя. Не понял... Слишком хитро. А преподаватели студенты и аспирантны бывают разные. Сейчас студенты зачастую лучше преподавателей разбираются в программировании... grexhide а насчет флеша и .avi - это забавно ! даешь интерактивные "дохументы" ! в аспекте скорого появления электронной бумаги данная идея становится все менее экзотичной в своей "кабы не идиотичности" (как тут говорят некоторые). AVI - это, конечно, хорошо. Но тут идея как раз была такая - чтобы студент ввел, скажем фазу одного из колебаний 90 градусов и с ужасом увидел круговую поляризацию. Тут дело в том, что иногда при повороте графика все так криво накладывается, что не видно, как же трактория изменяется. У меня, правда, график в пространстве можно вращать, но все равно, выпендрежа ради, я решил засандалить еще и пошаговое построение. Программа вообще бесплатная (ох посмеются все сейчас) :-) Могу выслать. Правда, она у меня метр почти "весит" :-) Повеселитесь :-) Главное, чтобы мой About никто не переделал... :-) Это вот проблема... А то две недели работы даром пропадут :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2006, 17:33:11 |
|
||
|
Проблема с Application.ProcessMessages
|
|||
|---|---|---|---|
|
#18+
Softwarer, спасибо. Вы как обычно, помогли (я раньше был Иван_Иван, мучал народ программой расчета линзовых растров). Скачала вашу прогу. Сижу изучаю. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2006, 17:34:48 |
|
||
|
Проблема с Application.ProcessMessages
|
|||
|---|---|---|---|
|
#18+
Softwarer, пытаюсь разобраться в вашей программе... По нажатию на кнопку Старт, вы стираете все на Image и задаете Timer.Enabled := true ; Кто такой таймер мне пока неведомо. Но все же... По нажатию на кнопку Стоп вы таймер делаете недоступным: Timer.Enabled := False ; А само построение идет в подпрограмме procedure TFormCircle.TimerTimer(Sender: TObject); Верно? Я так понимаю, пока Timer.Enabled=True, подпрограмма "работает". Как только Таймер.Enabled=False, подпрограмма "не работает". Верно? Я вот только ни черта, сорри, не понимаю, откуда взялась эта подпрограмма procedure TFormCircle.TimerTimer(Sender: TObject)? Меня эти буквы T и слова "Sender: TObject" пугают. Обычно они сами по себе появляются - тогда я стараюсь их не трогать. Вот моя подпрограмма она строит два графика быстро, а третий (Сумму) - медленно, по шагам: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2006, 17:58:42 |
|
||
|
Проблема с Application.ProcessMessages
|
|||
|---|---|---|---|
|
#18+
Федор_Федор что и требовалось доказать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2006, 18:13:05 |
|
||
|
Проблема с Application.ProcessMessages
|
|||
|---|---|---|---|
|
#18+
Федор_ФедорКто такой таймер мне пока неведомо. Милый, ты совсем забыл меня ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2006, 18:48:00 |
|
||
|
Проблема с Application.ProcessMessages
|
|||
|---|---|---|---|
|
#18+
Кнопка F1 Федор_ФедорКто такой таймер мне пока неведомо. Милый, ты совсем забыл меня :-) Во-первых, их шпрехе энглишь зэр шлехт. Вот. А в-вторых, я никак не пойму эту дурацкую помощь в Делфи. В Паскале все было отлично. Вот тебе процедура, вот - что она делает, вот - все ее аргументы и т.д., вот - пример проги на паскале. А в Делфи... Набрал я timer, нажал F1... И в ответ - тишина. Точнее пустота. Давай искать. И начинаются ветвящиеся гиперссылки. Таймер такой, таймер сякой, все от секундомера Касио до часов Таймекс. :-) Потом, появляются в тексте о таймере всякие "классы", "компоненты", API... Страшные слова... :-( Скорее всего, дело тут не в том, что "лыжи не едут", но все же... Я понимаю, что немножко посмеяться над профаном хочется :) Но теперь вы посмеялись, я тоже посмеялся, теперь можно помочь. Наверное... 8) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2006, 19:41:02 |
|
||
|
Проблема с Application.ProcessMessages
|
|||
|---|---|---|---|
|
#18+
Федор_ФедорА в Делфи... Набрал я timer, нажал F1... И в ответ - тишина. Точнее пустота. А ты набери Ttimer ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2006, 19:43:45 |
|
||
|
Проблема с Application.ProcessMessages
|
|||
|---|---|---|---|
|
#18+
Anatoly Podgoretsky Федор_ФедорА в Делфи... Набрал я timer, нажал F1... И в ответ - тишина. Точнее пустота. А ты набери Ttimer А вы шаман, однако. Спасибо. Дело сдвинулось с мертовой точки. Опять загадочная буква Т... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2006, 19:46:30 |
|
||
|
Проблема с Application.ProcessMessages
|
|||
|---|---|---|---|
|
#18+
Федор_ФедорА вы шаман, однако. Спасибо. Дело сдвинулось с мертовой точки. Опять загадочная буква Т... Не такая и загадочная, это сокращение от Type ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.04.2006, 20:05:18 |
|
||
|
Проблема с Application.ProcessMessages
|
|||
|---|---|---|---|
|
#18+
почитал эту тему. да... не ругайтесь, что поднимаю старую тему grexhideдаже классические операции - делать это раз в пять секунд должны решаться именно тредом - просто потому, что sleep(msec) куда более логичен и малозатратен для системы, чем Timer.Intervalа как же потом обращаться к VCL, из треда, делающего это раз в пять секунд? с помощью synchronize, принимающего только имя метода без параметров, т.е., параметры отрисовки, и обновления "этого" раз в пять секунд нужно как-то передавать из потока, в глобальных, или каких-то там переменных, что влияет на "надёжность", или они могут поменяться из соседнего потока Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. тогда, может выполниться присвоение caption_string из первого потока, потом выполнение переключится на второй, и выполнится присвоение в нём, а потом снова на первый, и UpdateCaption будет выполнен из него. так вот, чему же будет равно Caption? или, если вместо form1.caption сделать добавление в memo, то одно сообщение может пропасть (т.е., будут 2 одинаковых) а защитить критической секцией и caption_string, и Synchronize - невозможно, потому что Synchronize должен вызываться без критической секции. нихьт? и операции вроде добавления чего-то в memo, или отрисовки чего-то "раз в пять секунд" превращаются в головную боль. нихьт? через сообщения? а если надо не текст, а что-нибудь посложнее, какую-нибудь структуру данных, а то и не одну? а если нужно попеременно выполнять распараллеливаемый код с изменением vcl-компонентов, эт на каждое изменение - свою процедуру делать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2017, 02:56:53 |
|
||
|
Проблема с Application.ProcessMessages
|
|||
|---|---|---|---|
|
#18+
ya_ne_robot, wcthread решит все эти проблемы. но одну не решит, голову придется включать... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2017, 08:53:29 |
|
||
|
Проблема с Application.ProcessMessages
|
|||
|---|---|---|---|
|
#18+
wadmanwcthread решит все эти проблемы кстати, ты в девелопмент Лазаря часом не предложил, чтоб твой компонент в сорцы включили? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2017, 09:00:27 |
|
||
|
Проблема с Application.ProcessMessages
|
|||
|---|---|---|---|
|
#18+
Докwadmanwcthread решит все эти проблемы кстати, ты в девелопмент Лазаря часом не предложил, чтоб твой компонент в сорцы включили? Они там тормознутые... Отправил патч для лазрепорта, чтоб поправили пару строк для возможности формирования отчета в другом потоке. И тишина. В смысле висит на рассмотрении до сих пор. А вообще, пока рано. Нужно протестировать под FreeBsd, там чего-то не компилируется, но руки не доходят. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2017, 09:05:35 |
|
||
|
Проблема с Application.ProcessMessages
|
|||
|---|---|---|---|
|
#18+
[OFF] wadmanНужно протестировать под FreeBsd, там чего-то не компилируется, но руки не доходят. :) так ты напиши в ограничениях типа "only windows, gtk2, qt... etc". В Лазаре полно таких. Кстати, можно тут на всеобщее обозрение выложить - чем больше сторонников, тем быстрее вопрос решится. зы. это наше чисто рассейское неумение себя преподнести... [/OFF] ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2017, 09:24:32 |
|
||
|
Проблема с Application.ProcessMessages
|
|||
|---|---|---|---|
|
#18+
ДокКстати, можно тут на всеобщее обозрение выложить Лежит уже http://forum.lazarus.freepascal.org/index.php/topic,34505.0.html :-) Там и вылезла бага с компиляцией под freebsd. Обещали отписаться и помочь, но тишина... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2017, 09:29:55 |
|
||
|
Проблема с Application.ProcessMessages
|
|||
|---|---|---|---|
|
#18+
wadmanно тишина... так ты дергай время от времени тред... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.06.2017, 16:21:14 |
|
||
|
|

start [/forum/topic.php?fid=58&msg=33684407&tid=2042079]: |
0ms |
get settings: |
10ms |
get forum list: |
11ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
66ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
64ms |
get tp. blocked users: |
1ms |
| others: | 235ms |
| total: | 403ms |

| 0 / 0 |
