LINUX.ORG.RU

История изменений

Исправление alysnix, (текущая версия) :

гуи работают так. есть тред гуя, не обязательно это main тред аппы, можно его и отдельно пустить, фактически это тот тред, что будет крутить луп ивентов гуя. все отрисовки и прочие функции обьектов гуя(кнопки окна и все такое) может вызывать только он. других тредов юзер может напускать сколько угодно, но вызывать функции гуя они не могут. чтобы жмакнуть кнопку например из таких тредов, пробрасывается асинхронная мессага в тред гуя, и гуй должен давать такую возможность из коробки. и уже для треда гуя юзер пишет обработчик таких мессаг, которые кнопки жмут(окошки открывают, графики рисуют и все такое) по запросам из других тредов.

никто не запрещает создать и полностью тредсейф гуй с нуля, но поскольку обьекты гуя будут доступны из множества тредов, там все внутри надо обсадить мьютексами изначально. а поскольку гуи часто используют нетредсейф нативные контролы, то задача становится невыполнимой.

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

Исходная версия alysnix, :

гуи работают так. есть тред гуя, не обязательно это main тред аппы, можно его и отдельно пустить, фактически это тот тред, что будет крутить луп ивентов гуя. все отрисовки и прочие функции обьектов гуя(кнопки окна и все такое) может вызывать только он. других тредов юзер может напускать сколько угодно, но вызывать функции гуя они не могут. чтобы жмакнуть кнопку например из таких тредов, пробрасывается асинхронная мессага в тред гуя, и гуй должен давать такую возможность из коробки. и уже для треда гуя юзер пишет обработчик таких мессаг, которые кнопки жмут(окошки открывают, графики рисуют и все такое) по запросам из других тредов.

никто не запрещает создать и полностью тредсейф гуй с нуля, но поскольку обьекты гуя будут доступны из множества тредов, там все внутри надо обсадить мьютексами изначально. а поскольку гуи часто используют нетредсейф нативные контролы, то задача становится невыполнимой.