Board.KolibriOS.org

Official KolibriOS board
It is currently Sun Jan 19, 2020 4:58 pm

All times are UTC+03:00




Post new topic  Reply to topic  [ 400 posts ]  Go to page Previous 13 4 5 6 727 Next
Author Message
PostPosted: Tue Oct 13, 2009 7:03 am 
Offline
User avatar

Joined: Mon Apr 16, 2007 6:38 pm
Posts: 1222
Вопрос возник. В многопоточном приложении библиотеку (не только эту, а вообще любую) надо загружать для каждого потока, или единожды для всего приложения, и пользовать ее во всех потоках?

_________________
И мы уже давно не пешки,
Мы пули, мы орлы, и решки!
Война ютит бинарный код,
Умри, или иди вперед!


Top
   
PostPosted: Tue Oct 13, 2009 9:06 am 
Offline
Mentor
User avatar

Joined: Tue Jan 15, 2008 11:27 am
Posts: 752
в теории потоки используют единое адресное пространство, поэтому загружать библиотеку стоит один раз, и очень желательно до создания потоков. но это в теории. как на практике - надо ещё проверить (сомнения у меня вызывает запись в глобальные переменные, которые могут находиться в библиотеках).


Top
   
PostPosted: Tue Oct 13, 2009 9:17 am 
Offline
Kernel Optimizer
User avatar

Joined: Mon Jan 16, 2006 7:58 pm
Posts: 657
Для порожденного потока доступны адресное пространство родителя.
Однако многие библиотеки не реентерабельны [url]http://ru.wikipedia.org/wiki/Реентерабельность[/url]

Бибилотека box_lib.obj на 99% реентерабельна.


Top
   
PostPosted: Tue Oct 13, 2009 9:44 am 
Offline
User avatar

Joined: Mon Apr 16, 2007 6:38 pm
Posts: 1222
Спасибо большое за разъяснения) а оставшийся процент нереентерабельности к каким негативным последствиям может привести, и как их можно избежать?

_________________
И мы уже давно не пешки,
Мы пули, мы орлы, и решки!
Война ютит бинарный код,
Умри, или иди вперед!


Top
   
PostPosted: Tue Oct 13, 2009 9:53 am 
Gluk
На самом деле все зависит от того как библиотека написана, если повторная входимость учитывалась при написании, то проблем с вызовом не должно быть.
Для Box_lib все комопненты реентерабельны на 100%, кроме editbox. Который в ближайшее время надеюсь тоже будет пофиксен.


Last edited by Mario on Tue Oct 13, 2009 9:54 am, edited 1 time in total.

Top
   
PostPosted: Tue Oct 13, 2009 9:54 am 
Offline
Kernel Optimizer
User avatar

Joined: Mon Jan 16, 2006 7:58 pm
Posts: 657
Сегодня либа будет польностью реентерабельна. Я внесу необходымые изменения.


Top
   
PostPosted: Tue Oct 13, 2009 3:57 pm 
Offline
User avatar

Joined: Mon Apr 16, 2007 6:38 pm
Posts: 1222
Спасибо, это будет очень кстати =)

_________________
И мы уже давно не пешки,
Мы пули, мы орлы, и решки!
Война ютит бинарный код,
Умри, или иди вперед!


Top
   
PostPosted: Tue Oct 13, 2009 9:40 pm 
Offline
Kernel Optimizer
User avatar

Joined: Mon Jan 16, 2006 7:58 pm
Posts: 657
Изменения:
Итак изменилась структура компонента edit_box. Добавилась в структуру ссылка на переменную mouse_dd название этой переменной может быть любое. Но нужно соблюдать правило. Для потока с любым кол-во компонентов edit_box должна использоваться эта переменная. Для другого потока, даже порожденного должна быть предусмотрена своя такая переменная. В этой переменной храниться id бокса в котором произошло выделение. Если даже будет использоваться 1 переменная на 2 потока, это не приведет к крушению программы. Может потерятся выделение в компоненте. Однако рекомендую соблюдать правило - для каждого потока своя такая переменная.

Необходимо внести изменения в каждую программу. Иначе работает не корректно. Примеры находиться на svn.


Top
   
PostPosted: Thu Oct 15, 2009 12:44 pm 
Offline
User avatar

Joined: Thu May 19, 2005 4:43 pm
Posts: 896
В ревизии 1214 в box_lib вкралась ошибка. Во всех программах, использующих EditBox, при попытке редактировать текст программы вылетают.

_________________
KolibriOS-перспективная ос!
Kolibri is best operation system in the world!


Top
   
PostPosted: Thu Oct 15, 2009 1:13 pm 
andrew_programmer
В каких "во всех"? Например, я для zSea переделал согласно описанию измнения (более подробно в примерах на SVN)
<Lrz> wrote:
Добавилась в структуру ссылка на переменную mouse_dd название этой переменной может быть любое.

Переменная вставлена приблизительно посередине, соответственно структура следующих данных сдвинулась на 4 байта за счет переменной. Соответственно использующие приложения надо править (если уже не правлено) и перекомпилять.


Top
   
PostPosted: Thu Oct 15, 2009 1:34 pm 
Offline
Kernel Optimizer
User avatar

Joined: Mon Jan 16, 2006 7:58 pm
Posts: 657
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.


Top
   
PostPosted: Thu Oct 15, 2009 9:55 pm 
Offline
User avatar

Joined: Thu May 19, 2005 4:43 pm
Posts: 896
Я брал последнюю ночную сборку. Тестировал в ней свои программы. Потом мне понадобилось сохранить RAM Disk. Так как диск у меня не /hd0/, а /hd2/, то я стал править путь и программа RDSAVE вылетела. Потом попробовал EditBox в HTMLV - тоже самое. И для Screenshoot тоже самое. В общем везде, где используется EditBox происходит вылет при редактировании.

_________________
KolibriOS-перспективная ос!

Kolibri is best operation system in the world!


Top
   
PostPosted: Fri Oct 16, 2009 4:19 am 
Offline
Kernel Optimizer
User avatar

Joined: Mon Jan 16, 2006 7:58 pm
Posts: 657
Я нашел этот баг и я его пофиксел. Я надеюсь у тебя не будет проблем с моим компонентом.
---------
I found this bug and I fix it. I hope you will have no problems with my component.


Top
   
PostPosted: Sat Oct 17, 2009 10:54 pm 
Исходники компонента для выбора файла OpenDialog залиты на SVN ревизия 1219. Лицензия подобна лицензии BSD. По сути это отдельная программа, которая запускается с передачей параметра - указатель на именованную область, предварительно выделенную функцией 68.22. Большая часть обслуживающего кода, подключаемого к инициирующей программе, расположена в макросе opendial.mac. В принципе подключение к программам написанным на ассемблере будет несложным, насчет других языков ничего не могу сказать, возможно придется написать код подобный содержащемуся в макросе.

Исходники элемента управления FileBrowser и доработанного MenuBar (активация клавиатурой) были залиты еще раньше.

Поскольку OpenDialog использует иконки в формате PNG (в принципе можно и другие форматы, но нужно подключать код ответственный за распаковку изображения в RAW), то в ближайшее время в теме Проект: Полноценный графический просмотрщик будут выложены исходники 4-х модулей распаковки изображений, под лицензией подобной лицензии BSD.

З.Ы. По всем вопросам связанным с применением кода постараюсь ответить и помочь с внедрением OpenDialog, если найдутся желающие этим заниматься, однако на вопросы в стиле "докопайся до столба" отвечать не хочу, так что просьба к "шибко грамотным" таких вопросов не задавать.


Top
   
PostPosted: Fri Oct 23, 2009 12:34 am 
SVN ревизия 1227 - убраны лишние перерисовки при обработке события мыши для компонента OptionBox.


Top
   
Display posts from previous:  Sort by  
Post new topic  Reply to topic  [ 400 posts ]  Go to page Previous 13 4 5 6 727 Next

All times are UTC+03:00


Who is online

Users browsing this forum: No registered users and 2 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Limited