January 22nd, 2013

sic!

Анекдот дня, История дня и Афоризм дня по итогам голосования за 21 января 2013.
*** Афоризмы и фразы ***


Пока у вас есть личный астролог, у вашего личного астролога всегда будет собственный дурак.

  Рассказал(а): Влад Шимановский
  Оценки: всего голосов 24, сумма 23, средний 0.96
  Выпуск: http://www.anekdot.ru/an/an1301/a130121;20.html

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

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

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

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

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

P.S. нашёл интересную штуковину - GtkDatabox, надо освоить.

(no subject)

И протокольчик вчерне заработал, вот уже пишет "в реальном времени" переменную Uptime - контроллер тикает, а я на компе вижу, как одна из строк в табличке обновляется. Клёва!