O_oGerdtR wrote:Один буфер использовал и диалог, и поток перерисовки иконок для разных целей. И иногда они его юзали одновременно.
Icon - менеджер иконок рабочего стола
-
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
В тестовой я сделал 2 буфера. Вот только одно но: считаем размер буфера для перерисовки иконки: 68*68*4=18496, для перерисовки значка в диалоге: 32*32*3 = 3072. Ну, вот. Ну для диалога надо не много, но я вообще сэкономил и всё в один буфер. А сейчас соорудил вроде мьютекса(правильно написал? ). Ну есть переменная, которая служит флагом занятости буфера и те кому нужен буфер ждут, когда он освободиться. Задержек не видно даже при стресс-тесте (запускал окно, которое постоянно прыгало и заставляло перерисовываться значки, а я тем временем крутил прокрутку и заставлял перерисовываться диалог. Результат - никаких тормозов. Хотя это всё на реальной машине, конечно, но я с трудом убил это прыгающее окно - мельтешило всё).
Чем больше сыра, тем больше в нём дыр. Чем больше дыр, тем меньше в нём собственно сыра. Значит, чем больше сыра, тем меньше сыра!
GerdtR
Такой подход изначально порочен. Лучше раздели на отдельные области, много не сэкономишь, зато не будет необъяснимых странных ситуаций в будущем. Не плоди себе и последующим программистам головную боль.
Такой подход изначально порочен. Лучше раздели на отдельные области, много не сэкономишь, зато не будет необъяснимых странных ситуаций в будущем. Не плоди себе и последующим программистам головную боль.
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
Во время перетаскивания иконок при открытом диалоге свойств на Board появляется "destroy app object". Через некоторое время это привело к вылету:В исходнике есть BGRedrawThread. И если одновременно запущено 2 и более потока, то, вероятно, возникнут проблемы. Стек у них будет общий, а там есть такой код:
svn4007
Spoiler:
Code: Select all
@@: push ecx, <----
cmp [IconNoDraw],ebx
je .nd
stdcall DrawIcon,ebx,0 <----
.nd:
inc ebx
pop ecx <----
Для каждого потока свой стек.
Code: Select all
rb 1024
stack_dlg:
align 4
rb 1024
stack_bredraw:
rb 1024
stack_area:
Чем больше сыра, тем больше в нём дыр. Чем больше дыр, тем меньше в нём собственно сыра. Значит, чем больше сыра, тем меньше сыра!
Если так, то всё нормально. Просто я кромеGerdtR wrote:Для каждого потока свой стек.
Code: Select all
mcall 51,1,BGRedrawThread,stack_bredraw
GerdtR wrote:Для каждого потока свой стек.
Code: Select all
mcall 51,1,DlgAdd,stack_dlg ;CreateThread DlgAdd,stack_dlg
mcall 51,1,MovingWnd,stack_dlg ;CreateThread MovingWnd,stack_dlg
Ой Понял, исправлю)
Чем больше сыра, тем больше в нём дыр. Чем больше дыр, тем меньше в нём собственно сыра. Значит, чем больше сыра, тем меньше сыра!
Только вчера смотрел:GerdtR wrote:Ой Понял, исправлю)
-Это Эврика, сэр! Приоритетная ситуация номер один!
-Соберите всех в гостиной! Тема совещания "А я вам говорил!"
Всем чмоки в этом проекте! Засуньте эти 11 лет себе в жопу!
Дал каждому потоку свой стек и диалог теперь в своём собственном буфере рисует. Вроде теперь толпы багов должны исчезнуть. И осталось сделать красивую менюшку.
Чем больше сыра, тем больше в нём дыр. Чем больше дыр, тем меньше в нём собственно сыра. Значит, чем больше сыра, тем меньше сыра!
С этим багом сложно что-то сделать. Можно, конечно, при клике искать не ту иконку, в области какой кликнули, а ту, центр которой ближе к точке клика... вроде даже не сложно, но баг просто менее заметен будет. Не сильно поможет. Пускай будет как есть.Akyltist wrote:3. Понимаю что даже в винде так, но там это визуально сопровождается выделением при наведении, здесь же пока не кликнешь не увидишь) Мож не баг, мож фича собственно это уже так, искуственно - мне не мешает:
Чем больше сыра, тем больше в нём дыр. Чем больше дыр, тем меньше в нём собственно сыра. Значит, чем больше сыра, тем меньше сыра!
При вызове меню правой кнопкой мыши с открытым диалогом свойств:Раньше уже писал про это viewtopic.php?p=52143#p52143, но в этот раз ещё и на иконках что-то появилось. У меня это проявляется не очень часто.
svn4028
@icon.asm:
Spoiler:
svn4028
@icon.asm:
RButton.inc:mcall 51,1,RButtonWin,stack_dlg ;CreateThread RButtonWin,stack_dlg
mcall 51,1,DlgAdd,stack_dlg ;CreateThread DlgAdd,stack_dlg
Опять со стеком прошляпил
Чем больше сыра, тем больше в нём дыр. Чем больше дыр, тем меньше в нём собственно сыра. Значит, чем больше сыра, тем меньше сыра!
Сделал менюшку как в сишной версии. И стек теперь у каждого свой, за исключением стека для окна при перетаскивании и окна менюшки. Ну одновременно эти два потока никак не запустить.
Чем больше сыра, тем больше в нём дыр. Чем больше дыр, тем меньше в нём собственно сыра. Значит, чем больше сыра, тем меньше сыра!
Уже близко к идеалу. Хочу только попросить добавить ободок и сделать выделенный элемент более контасным (использовать цвета кнопки), как на скрине.
- Attachments
-
-
Screenshot_1.png (13.72 KiB)Viewed 4751 times
-
Из хаоса в космос
Who is online
Users browsing this forum: No registered users and 1 guest