Доброго времени суток.
Надеюсь, что угадал с рубрикой.
Пишу кроссплатформенную библиотеку, которая прикручивается к ff как компонент.
В основном потоке ff создает экземпляр объекта (компонент), который в свою очередь запускает в новом потоке свои расчеты. О процессе расчета и его результатах из созданного раннее потока должны приходить уведомления. (Таким образом достигается асинхронность выполнения и развязывается поток обработки сообщений для интерфейса ff /чтоб не "замирал"/ и расчетов).
В Windows все реализуется достаточно просто. При создании экземпляра в основном потоке, создается окно, указывается DefWndProc, задается сообщение WM_USER + n и пишется указанная функция обработки. Теперь создается поток, в нем запускаются расчеты, передается HWND созданного окна и как наступил момент оповещения - вызывается системный PostMessage на переданный указатель окна. Поскольку окно было создано в основном потоке, сообщения окну тоже будут обрабатываться в нем.
Сделано это было для того, чтоб ff не ругался, что к нему (к другим компонентам ff) обращаются НЕ из основного потока.
А теперь вопрос.
Как подобную штуку можно реализовать для linux.
Я пробовал примерно тоже самое. Создавал при помощи XLib окно, получал Widget окна через XtWindowToWidget, прикручивал ему обработчик XtAddEventHandler, посылал окну событие (например: keypress code=1) XSendMessage... А оно не ловится. Что делать ума не приложу. Обыскал все что можно в сети. Перерыл кучу man`ов.
Может вообще идеология построения (передачи оповещений) должна быть другой?
Может использовать какую-либо обертку для XLib?
Буду очень благодарен за любые ссылки по теме, за идеи, до которых я не додумался.
С уважением, DV.