box_lib.obj - библиотека gui компонентов
-
Вопрос возник. В многопоточном приложении библиотеку (не только эту, а вообще любую) надо загружать для каждого потока, или единожды для всего приложения, и пользовать ее во всех потоках?И мы уже давно не пешки,
Мы пули, мы орлы, и решки!
Война ютит бинарный код,
Умри, или иди вперед!
в теории потоки используют единое адресное пространство, поэтому загружать библиотеку стоит один раз, и очень желательно до создания потоков. но это в теории. как на практике - надо ещё проверить (сомнения у меня вызывает запись в глобальные переменные, которые могут находиться в библиотеках).
Для порожденного потока доступны адресное пространство родителя.
Однако многие библиотеки не реентерабельны http://ru.wikipedia.org/wiki/Реентерабельность
Бибилотека box_lib.obj на 99% реентерабельна.
Однако многие библиотеки не реентерабельны http://ru.wikipedia.org/wiki/Реентерабельность
Бибилотека box_lib.obj на 99% реентерабельна.
Спасибо большое за разъяснения) а оставшийся процент нереентерабельности к каким негативным последствиям может привести, и как их можно избежать?
И мы уже давно не пешки,
Мы пули, мы орлы, и решки!
Война ютит бинарный код,
Умри, или иди вперед!
Мы пули, мы орлы, и решки!
Война ютит бинарный код,
Умри, или иди вперед!
Gluk
На самом деле все зависит от того как библиотека написана, если повторная входимость учитывалась при написании, то проблем с вызовом не должно быть.
Для Box_lib все комопненты реентерабельны на 100%, кроме editbox. Который в ближайшее время надеюсь тоже будет пофиксен.
На самом деле все зависит от того как библиотека написана, если повторная входимость учитывалась при написании, то проблем с вызовом не должно быть.
Для Box_lib все комопненты реентерабельны на 100%, кроме editbox. Который в ближайшее время надеюсь тоже будет пофиксен.
Last edited by Mario on Tue Oct 13, 2009 9:54 am, edited 1 time in total.
Сегодня либа будет польностью реентерабельна. Я внесу необходымые изменения.
Спасибо, это будет очень кстати =)
И мы уже давно не пешки,
Мы пули, мы орлы, и решки!
Война ютит бинарный код,
Умри, или иди вперед!
Мы пули, мы орлы, и решки!
Война ютит бинарный код,
Умри, или иди вперед!
Изменения:
Итак изменилась структура компонента edit_box. Добавилась в структуру ссылка на переменную mouse_dd название этой переменной может быть любое. Но нужно соблюдать правило. Для потока с любым кол-во компонентов edit_box должна использоваться эта переменная. Для другого потока, даже порожденного должна быть предусмотрена своя такая переменная. В этой переменной храниться id бокса в котором произошло выделение. Если даже будет использоваться 1 переменная на 2 потока, это не приведет к крушению программы. Может потерятся выделение в компоненте. Однако рекомендую соблюдать правило - для каждого потока своя такая переменная.
Необходимо внести изменения в каждую программу. Иначе работает не корректно. Примеры находиться на svn.
Итак изменилась структура компонента edit_box. Добавилась в структуру ссылка на переменную mouse_dd название этой переменной может быть любое. Но нужно соблюдать правило. Для потока с любым кол-во компонентов edit_box должна использоваться эта переменная. Для другого потока, даже порожденного должна быть предусмотрена своя такая переменная. В этой переменной храниться id бокса в котором произошло выделение. Если даже будет использоваться 1 переменная на 2 потока, это не приведет к крушению программы. Может потерятся выделение в компоненте. Однако рекомендую соблюдать правило - для каждого потока своя такая переменная.
Необходимо внести изменения в каждую программу. Иначе работает не корректно. Примеры находиться на svn.
В ревизии 1214 в box_lib вкралась ошибка. Во всех программах, использующих EditBox, при попытке редактировать текст программы вылетают.
KolibriOS-перспективная ос!
Kolibri is best operation system in the world!
Kolibri is best operation system in the world!
andrew_programmer
В каких "во всех"? Например, я для zSea переделал согласно описанию измнения (более подробно в примерах на SVN)
В каких "во всех"? Например, я для zSea переделал согласно описанию измнения (более подробно в примерах на SVN)
Переменная вставлена приблизительно посередине, соответственно структура следующих данных сдвинулась на 4 байта за счет переменной. Соответственно использующие приложения надо править (если уже не правлено) и перекомпилять.<Lrz> wrote:Добавилась в структуру ссылка на переменную mouse_dd название этой переменной может быть любое.
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.
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.
Я брал последнюю ночную сборку. Тестировал в ней свои программы. Потом мне понадобилось сохранить RAM Disk. Так как диск у меня не /hd0/, а /hd2/, то я стал править путь и программа RDSAVE вылетела. Потом попробовал EditBox в HTMLV - тоже самое. И для Screenshoot тоже самое. В общем везде, где используется EditBox происходит вылет при редактировании.
KolibriOS-перспективная ос!
Kolibri is best operation system in the world!
Kolibri is best operation system in the world!
Я нашел этот баг и я его пофиксел. Я надеюсь у тебя не будет проблем с моим компонентом.
---------
I found this bug and I fix it. I hope you will have no problems with my component.
---------
I found this bug and I fix it. I hope you will have no problems with my component.
Исходники компонента для выбора файла OpenDialog залиты на SVN ревизия 1219. Лицензия подобна лицензии BSD. По сути это отдельная программа, которая запускается с передачей параметра - указатель на именованную область, предварительно выделенную функцией 68.22. Большая часть обслуживающего кода, подключаемого к инициирующей программе, расположена в макросе opendial.mac. В принципе подключение к программам написанным на ассемблере будет несложным, насчет других языков ничего не могу сказать, возможно придется написать код подобный содержащемуся в макросе.
Исходники элемента управления FileBrowser и доработанного MenuBar (активация клавиатурой) были залиты еще раньше.
Поскольку OpenDialog использует иконки в формате PNG (в принципе можно и другие форматы, но нужно подключать код ответственный за распаковку изображения в RAW), то в ближайшее время в теме Проект: Полноценный графический просмотрщик будут выложены исходники 4-х модулей распаковки изображений, под лицензией подобной лицензии BSD.
З.Ы. По всем вопросам связанным с применением кода постараюсь ответить и помочь с внедрением OpenDialog, если найдутся желающие этим заниматься, однако на вопросы в стиле "докопайся до столба" отвечать не хочу, так что просьба к "шибко грамотным" таких вопросов не задавать.
Исходники элемента управления FileBrowser и доработанного MenuBar (активация клавиатурой) были залиты еще раньше.
Поскольку OpenDialog использует иконки в формате PNG (в принципе можно и другие форматы, но нужно подключать код ответственный за распаковку изображения в RAW), то в ближайшее время в теме Проект: Полноценный графический просмотрщик будут выложены исходники 4-х модулей распаковки изображений, под лицензией подобной лицензии BSD.
З.Ы. По всем вопросам связанным с применением кода постараюсь ответить и помочь с внедрением OpenDialog, если найдутся желающие этим заниматься, однако на вопросы в стиле "докопайся до столба" отвечать не хочу, так что просьба к "шибко грамотным" таких вопросов не задавать.
SVN ревизия 1227 - убраны лишние перерисовки при обработке события мыши для компонента OptionBox.
Who is online
Users browsing this forum: No registered users and 4 guests