Page 24 of 30
Re: Icon - менеджер иконок рабочего стола
Posted: Fri Oct 11, 2013 3:48 pm
by Mario_r4
GerdtR wrote:Один буфер использовал и диалог, и поток перерисовки иконок для разных целей. И иногда они его юзали одновременно.
O_o
Re: Icon - менеджер иконок рабочего стола
Posted: Fri Oct 11, 2013 3:59 pm
by GerdtR
В тестовой я сделал 2 буфера. Вот только одно но: считаем размер буфера для перерисовки иконки: 68*68*4=18496, для перерисовки значка в диалоге: 32*32*3 = 3072. Ну, вот. Ну для диалога надо не много, но я вообще сэкономил и всё в один буфер. А сейчас соорудил вроде мьютекса(правильно написал?
). Ну есть переменная, которая служит флагом занятости буфера и те кому нужен буфер ждут, когда он освободиться. Задержек не видно даже при стресс-тесте (запускал окно, которое постоянно прыгало и заставляло перерисовываться значки, а я тем временем крутил прокрутку и заставлял перерисовываться диалог. Результат - никаких тормозов. Хотя это всё на реальной машине, конечно, но я с трудом убил это прыгающее окно - мельтешило всё).
Re: Icon - менеджер иконок рабочего стола
Posted: Fri Oct 11, 2013 4:30 pm
by Mario_r4
GerdtR
Такой подход изначально порочен. Лучше раздели на отдельные области, много не сэкономишь, зато не будет необъяснимых странных ситуаций в будущем. Не плоди себе и последующим программистам головную боль.
Re: Icon - менеджер иконок рабочего стола
Posted: Fri Oct 11, 2013 6:12 pm
by 0CodErr
Во время перетаскивания иконок при открытом диалоге свойств на Board появляется "destroy app object". Через некоторое время это привело к вылету:
Spoiler:
-
11.PNG (7.8 KiB)
Viewed 4923 times
В исходнике есть BGRedrawThread. И если одновременно запущено 2 и более потока, то, вероятно, возникнут проблемы. Стек у них будет общий, а там есть такой код:
Code: Select all
@@: push ecx, <----
cmp [IconNoDraw],ebx
je .nd
stdcall DrawIcon,ebx,0 <----
.nd:
inc ebx
pop ecx <----
svn4007
Re: Icon - менеджер иконок рабочего стола
Posted: Fri Oct 11, 2013 6:44 pm
by GerdtR
Для каждого потока свой стек.
Code: Select all
rb 1024
stack_dlg:
align 4
rb 1024
stack_bredraw:
rb 1024
stack_area:
Re: Icon - менеджер иконок рабочего стола
Posted: Fri Oct 11, 2013 7:03 pm
by 0CodErr
GerdtR wrote:Для каждого потока свой стек.
Если так, то всё нормально. Просто я кроме
Code: Select all
mcall 51,1,BGRedrawThread,stack_bredraw
в @icon.asm больше нигде не нашёл создания потока.
Re: Icon - менеджер иконок рабочего стола
Posted: Fri Oct 11, 2013 8:08 pm
by 0CodErr
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
Re: Icon - менеджер иконок рабочего стола
Posted: Fri Oct 11, 2013 8:45 pm
by GerdtR
Ой
Понял, исправлю)
Re: Icon - менеджер иконок рабочего стола
Posted: Fri Oct 11, 2013 9:28 pm
by Mario_r4
GerdtR wrote:Ой
Понял, исправлю)
Только вчера смотрел:
-Это Эврика, сэр! Приоритетная ситуация номер один!
-Соберите всех в гостиной! Тема совещания "А я вам говорил!"
Re: Icon - менеджер иконок рабочего стола
Posted: Tue Oct 15, 2013 2:10 am
by GerdtR
Дал каждому потоку свой стек и диалог теперь в своём собственном буфере рисует. Вроде теперь толпы багов должны исчезнуть. И осталось сделать красивую менюшку.
Re: Icon - менеджер иконок рабочего стола
Posted: Tue Oct 15, 2013 2:18 am
by GerdtR
Akyltist wrote:3. Понимаю что даже в винде так, но там это визуально сопровождается выделением при наведении, здесь же пока не кликнешь не увидишь) Мож не баг, мож фича собственно это уже так, искуственно - мне не мешает:
С этим багом сложно что-то сделать. Можно, конечно, при клике искать не ту иконку, в области какой кликнули, а ту, центр которой ближе к точке клика... вроде даже не сложно, но баг просто менее заметен будет. Не сильно поможет. Пускай будет как есть.
Re: Icon - менеджер иконок рабочего стола
Posted: Tue Oct 15, 2013 2:00 pm
by 0CodErr
При вызове меню правой кнопкой мыши с открытым диалогом свойств:
Spoiler:
-
1221.PNG (97.9 KiB)
Viewed 4809 times
Раньше уже писал про это
viewtopic.php?p=52143#p52143, но в этот раз ещё и на иконках что-то появилось. У меня это проявляется не очень часто.
svn4028
@icon.asm:
mcall 51,1,RButtonWin,stack_dlg ;CreateThread RButtonWin,stack_dlg
RButton.inc:
mcall 51,1,DlgAdd,stack_dlg ;CreateThread DlgAdd,stack_dlg
Re: Icon - менеджер иконок рабочего стола
Posted: Tue Oct 15, 2013 2:08 pm
by GerdtR
Опять со стеком прошляпил
Re: Icon - менеджер иконок рабочего стола
Posted: Tue Oct 15, 2013 10:23 pm
by GerdtR
Сделал менюшку как в сишной версии. И стек теперь у каждого свой, за исключением стека для окна при перетаскивании и окна менюшки. Ну одновременно эти два потока никак не запустить.
Re: Icon - менеджер иконок рабочего стола
Posted: Tue Oct 15, 2013 10:32 pm
by Leency
Уже близко к идеалу. Хочу только попросить добавить ободок и сделать выделенный элемент более контасным (использовать цвета кнопки), как на скрине.