LINUX.ORG.RU

FLTK, многопоточность

 , ,


0

2

Привет. Хочу уточнить, чтобы потом не переделывать: как известно, рисовать гуйню - прерогатива главного потока. FLTK доки - не очень ясно излагают

A worker thread may update the state of an existing widget, but it may not do any rendering directly, nor create or destroy a window.

Что понимается под create or destroy? Нельзя вызывать конструктор виджетов или нельзя вызывать show() из worker’ов? Если ответ отрицательный, до будет проблемно передавать функтор для создания окна в главный поток, т.к. функтор из плагина, значит нужно будет ещё костылить инкремент юзеров модуля, решаемо, но не хочется.

Ну и ещё небольшая непонятка - нужно ли брать Fl::lock() во время создания виджета из другого потока (без вызова show(), если это допустимо)?


Ответ на: комментарий от sparkie

Здорово, ты очень наблюдательный. Вопрос о том, а что считается create? Вызов конструктора виджета (после которого он еще не отрисован), или фактическая отрисовка после вызова show(), который дергает соответсвующее нижележащее системное api.

kvpfs_2
() автор топика
Ответ на: комментарий от kvpfs_2

...ты очень наблюдательный...

Очень смешно.

...что считается create...

Ну, там же ясно написано.

...а также не создавать и не разрушать окно...

Следовательно второй вариант, нет?

sparkie ★★★★★
()
Ответ на: комментарий от sparkie

Ну, там же ясно написано.

Не знаю, мне не ясно. То ли конструктор класса …Window, то ли show/hide. Ещё задал вопрос в профильной FLTK’ной группе, какой-то ясности также не получил, что-то в духе: «я бы не юзал …». Дать однозначный ответ может лишь тот, кто это проектировал и знает ливер. Буду кидать функтор-фабрику главному потоку, может и смысла не имеет, но на всякий случай перестрахуюсь.

kvpfs_2
() автор топика

Может посмотреть как это в коде написано в приложениях, а не гадать? Например в том же dillo или в EDE

vbcnthfkmnth123 ★★★★★
()
Ответ на: комментарий от kvpfs_2

... да и не факт, что они там знают точно

Как показывает опыт, нет, не знают.

sparkie ★★★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.