‮Сдвиг по фазе (kincajou) wrote,
‮Сдвиг по фазе
kincajou

gtk, продолжаю мучения. И уже кое-что получается.

Вощем, с некоторым обескуражием обнаружив отсутствие в моей "Федоре" классических библиотек поддержки асинхронных очередей (POSIX mqueue, GAsyncQueue и всего остального, что я ещё смог найти по этой теме),.. вообще не понимаю, как это может быть, но факт остаётся фактом.

А, да, попутно обнаружилось, что некая часть библиотеки pthread реализована НЕ ТАК (?!), как описывает литература - например, функция pthread_getattr_np находится вовсе не в pthread.h, но это уже мелочи.

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

Теперь архитектурка такая: отдельный поток читает /dev/tty и получаемые байты кладёт в очередь. В главном процессе, перед gtk_main, поставил вызов g_idle_add, коему передаю имя этой самой idle-процидурки. А уже она берёт байты из очереди (когда они там есть), делает из них строки и скармливает gtk_text_insert. И всё заработало!!! Теперь у меня в отдельной закладке крутится всамделишный (хоть и примитивный) терминальчик, который я могу теперь замодифицировать как только возжелаю -- к нему надо ещё прикрутить протокольный парсер. И ничё не тормозит, не падает и не заклинивает.

Код не слишком аккуратный (мне не нравится, что idle-функция заметно грузит процессор -- no good!), но работает же, РАБОТАЕТ!

Готовность проекта: 60%
Tags: приключения Электроника
Subscribe

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 40 comments