Xpoint
   [напомнить пароль]

Аналог PostMessage в FF

Метки: [без меток]
2007-09-23 21:08:08 [обр] dv[досье]

Доброго времени суток.
Надеюсь, что угадал с рубрикой.

Пишу кроссплатформенную библиотеку, которая прикручивается к ff как компонент.
В основном потоке ff создает экземпляр объекта (компонент), который в свою очередь запускает в новом потоке свои расчеты. О процессе расчета и его результатах из созданного раннее потока должны приходить уведомления. (Таким образом достигается асинхронность выполнения и развязывается поток обработки сообщений для интерфейса ff /чтоб не "замирал"/ и расчетов).

В Windows все реализуется достаточно просто. При создании экземпляра в основном потоке, создается окно, указывается DefWndProc, задается сообщение WM_USER + n и пишется указанная функция обработки. Теперь создается поток, в нем запускаются расчеты, передается HWND созданного окна и как наступил момент оповещения - вызывается системный PostMessage на переданный указатель окна. Поскольку окно было создано в основном потоке, сообщения окну тоже будут обрабатываться в нем.

Сделано это было для того, чтоб ff не ругался, что к нему (к другим компонентам ff) обращаются НЕ из основного потока.

А теперь вопрос.
Как подобную штуку можно реализовать для linux.
Я пробовал примерно тоже самое. Создавал при помощи XLib окно, получал Widget окна через XtWindowToWidget, прикручивал ему обработчик XtAddEventHandler, посылал окну событие (например: keypress code=1) XSendMessage... А оно не ловится. Что делать ума не приложу. Обыскал все что можно в сети. Перерыл кучу man`ов.

Может вообще идеология построения (передачи оповещений) должна быть другой?
Может использовать какую-либо обертку для XLib?

Буду очень благодарен за любые ссылки по теме, за идеи, до которых я не додумался.

С уважением, DV.

спустя 20 часов [обр] Владимир Палант(434/4445)[досье]
Вообще-то — да, передавать оповещения нужно иначе. В Gecko есть для этого собственные, кросс-платформенные функции. Вопрос лишь в том, с какой версией Gecko вы работаете. В Gecko 1.9, на котором будет основан Firefox 3.0, эти интерфейсы переработали (http://wiki.mozilla.org/XPCOM:nsIThreadManager, вас интересует в основном nsIEventTarget.dispatch()). Боюсь, что аналоги в Gecko 1.8 я знаю плохо, поскольку ими можно пользоваться только из Си++.
Powered by POEM™ Engine Copyright © 2002-2005