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

gtk и glib, самоуничтожающийся idle

ну чо, скептики в очередной раз посрамлены ;) вполне работоспособный способ. Сделал так:
1) структурка с флагом "менеджер FIFO включен" и мьютексом.
2) функция "обновить менеджер FIFO"

функция вызывается из потока, принимающего данные - собственно, ПОСЛЕ приёма очередной порции. Она смотрит на флаг "включен?" и если уже нет, то заново его включает. Сам же "менеджер FIFO" совершает ритуальное самоубийство, если очередь данных пуста. И сбрасывает флажок (собсно, поэтому мьютекс и нужен - флаг анализируется одним потоком, а меняет состояние в другом)

Таким образом, если данные есть - он работает, автоматически завершаясь после опустошения очереди. Если же данные приходят, пока он работает, то функционирование ничем не отличается от предыдущей версии. Байты приходят не так чтобы совсем уж часто и на графике загрузки ЦПУ я вообще не вижу пиков - колебания где-то около нуля, что мне и требовалось. Voila! Из всех лишних накладных расходов - тест логической переменной и, время от времени, добавление указателя на функцию в очередь. Ничего страшного.

(и никакой это не "обход системных механизмов", это как раз их бесхитростная эксплуатация).

P.S. нашёл интересную штуковину - GtkDatabox, надо освоить.
Tags: приключения Электроника
Subscribe

  • О настоящем патриоте.

    Олег Матвейчев - лживый идиот и распространитель плоскозёмной пропаганды. Впрочем, ничего нового.

  • штоу?

    и достигл высокой эффективности колумбической системы 99,9%

  • А теперь им уже по 10 лет

    хотя ещё "вчера" было вот так: В пересчёте на человечий возраст, им сейчас примерно столько, сколько мне.

  • 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 

  • 2 comments