Page 5 of 29
Re: box_lib.obj - библиотека gui компонентов
Posted: Tue Oct 13, 2009 7:03 am
by Gluk
Вопрос возник. В многопоточном приложении библиотеку (не только эту, а вообще любую) надо загружать для каждого потока, или единожды для всего приложения, и пользовать ее во всех потоках?
Re: box_lib.obj - библиотека gui компонентов
Posted: Tue Oct 13, 2009 9:06 am
by Albom
в теории потоки используют единое адресное пространство, поэтому загружать библиотеку стоит один раз, и очень желательно до создания потоков. но это в теории. как на практике - надо ещё проверить (сомнения у меня вызывает запись в глобальные переменные, которые могут находиться в библиотеках).
Re: box_lib.obj - библиотека gui компонентов
Posted: Tue Oct 13, 2009 9:17 am
by <Lrz>
Для порожденного потока доступны адресное пространство родителя.
Однако многие библиотеки не реентерабельны
http://ru.wikipedia.org/wiki/Реентерабельность
Бибилотека box_lib.obj на 99% реентерабельна.
Re: box_lib.obj - библиотека gui компонентов
Posted: Tue Oct 13, 2009 9:44 am
by Gluk
Спасибо большое за разъяснения) а оставшийся процент нереентерабельности к каким негативным последствиям может привести, и как их можно избежать?
Re: box_lib.obj - библиотека gui компонентов
Posted: Tue Oct 13, 2009 9:53 am
by Mario
Gluk
На самом деле все зависит от того как библиотека написана, если повторная входимость учитывалась при написании, то проблем с вызовом не должно быть.
Для Box_lib все комопненты реентерабельны на 100%, кроме editbox. Который в ближайшее время надеюсь тоже будет пофиксен.
Re: box_lib.obj - библиотека gui компонентов
Posted: Tue Oct 13, 2009 9:54 am
by <Lrz>
Сегодня либа будет польностью реентерабельна. Я внесу необходымые изменения.
Re: box_lib.obj - библиотека gui компонентов
Posted: Tue Oct 13, 2009 3:57 pm
by Gluk
Спасибо, это будет очень кстати =)
Re: box_lib.obj - библиотека gui компонентов
Posted: Tue Oct 13, 2009 9:40 pm
by <Lrz>
Изменения:
Итак изменилась структура компонента edit_box. Добавилась в структуру ссылка на переменную mouse_dd название этой переменной может быть любое. Но нужно соблюдать правило. Для потока с любым кол-во компонентов edit_box должна использоваться эта переменная. Для другого потока, даже порожденного должна быть предусмотрена своя такая переменная. В этой переменной храниться id бокса в котором произошло выделение. Если даже будет использоваться 1 переменная на 2 потока, это не приведет к крушению программы. Может потерятся выделение в компоненте. Однако рекомендую соблюдать правило - для каждого потока своя такая переменная.
Необходимо внести изменения в каждую программу. Иначе работает не корректно. Примеры находиться на svn.
Re: box_lib.obj - библиотека gui компонентов
Posted: Thu Oct 15, 2009 12:44 pm
by andrew_programmer
В ревизии 1214 в box_lib вкралась ошибка. Во всех программах, использующих EditBox, при попытке редактировать текст программы вылетают.
Re: box_lib.obj - библиотека gui компонентов
Posted: Thu Oct 15, 2009 1:13 pm
by Mario
andrew_programmer
В каких "во всех"? Например, я для zSea переделал согласно описанию измнения (более подробно в примерах на SVN)
<Lrz> wrote:Добавилась в структуру ссылка на переменную mouse_dd название этой переменной может быть любое.
Переменная вставлена приблизительно посередине, соответственно структура следующих данных сдвинулась на 4 байта за счет переменной. Соответственно использующие приложения надо править (если уже не правлено) и перекомпилять.
Re: box_lib.obj - библиотека gui компонентов
Posted: Thu Oct 15, 2009 1:34 pm
by <Lrz>
ed_struc_size=76
struc edit_box width,left,top,color,shift_color,focus_border_color,\
blur_border_color,text_color,max,text,mouse_variable,flags,size,pos
....
mouse_variable dd ?
Все ассемблерные программы я переписал. Глючат программы написанные на C.
Re: box_lib.obj - библиотека gui компонентов
Posted: Thu Oct 15, 2009 9:55 pm
by andrew_programmer
Я брал последнюю ночную сборку. Тестировал в ней свои программы. Потом мне понадобилось сохранить RAM Disk. Так как диск у меня не /hd0/, а /hd2/, то я стал править путь и программа RDSAVE вылетела. Потом попробовал EditBox в HTMLV - тоже самое. И для Screenshoot тоже самое. В общем везде, где используется EditBox происходит вылет при редактировании.
Re: box_lib.obj - библиотека gui компонентов
Posted: Fri Oct 16, 2009 4:19 am
by <Lrz>
Я нашел этот баг и я его пофиксел. Я надеюсь у тебя не будет проблем с моим компонентом.
---------
I found this bug and I fix it. I hope you will have no problems with my component.
Re: box_lib.obj - библиотека gui компонентов
Posted: Sat Oct 17, 2009 10:54 pm
by Mario
Исходники компонента для выбора файла
OpenDialog залиты на SVN ревизия 1219. Лицензия подобна лицензии BSD. По сути это отдельная программа, которая запускается с передачей параметра - указатель на именованную область, предварительно выделенную функцией 68.22. Большая часть обслуживающего кода, подключаемого к инициирующей программе, расположена в макросе opendial.mac. В принципе подключение к программам написанным на ассемблере будет несложным, насчет других языков ничего не могу сказать, возможно придется написать код подобный содержащемуся в макросе.
Исходники элемента управления
FileBrowser и доработанного
MenuBar (активация клавиатурой) были залиты еще раньше.
Поскольку
OpenDialog использует иконки в формате PNG (в принципе можно и другие форматы, но нужно подключать код ответственный за распаковку изображения в RAW), то в ближайшее время в теме
Проект: Полноценный графический просмотрщик будут выложены исходники 4-х модулей распаковки изображений, под лицензией подобной лицензии BSD.
З.Ы. По всем вопросам связанным с применением кода постараюсь ответить и помочь с внедрением
OpenDialog, если найдутся желающие этим заниматься, однако на вопросы в стиле "докопайся до столба" отвечать не хочу, так что просьба к "шибко грамотным" таких вопросов не задавать.
Re: box_lib.obj - библиотека gui компонентов
Posted: Fri Oct 23, 2009 12:34 am
by Mario
SVN ревизия 1227 - убраны лишние перерисовки при обработке события мыши для компонента OptionBox.