[ruby-gnome2-doc-cvs] [Hiki] create - tut-gst-threads

アーカイブの一覧に戻る

ruby-****@sourc***** ruby-****@sourc*****
2005年 3月 24日 (木) 22:09:20 JST


-------------------------
REMOTE_ADDR = 213.37.10.235
REMOTE_HOST = 
REMOTE_USER = ruby-gnome2-hiki        URL = http://ruby-gnome2.sourceforge.jp/cgi-bin/hiki/es/hiki.cgi?tut-gst-threads
-------------------------
TITLE       = Hilos
KEYWORD     = 
= Hilos
{{link("tut-gst-types", nil, "tut-gst", "tut-gst-queues")}}

GStreamer tiene soporte para multithreading gracias al uso del objeto Gst::Thread. De hecho, este objeto es un Gst::Bin especial que se convierte en un nuevo hilo al iniciarse.

Para construir un nuevo hilo actuamos de la siguiente forma:

  # crea el objeto thread
  thread = Gst::Thread.new

  # a$B(Bdimos algunos plugins
  thread.add(funky_src, cool_effect)

  # conectamos los elementos
  ...

  # comienza la reproducci$B(B
  thread.play

El programa anterior crearun hilo con dos elementos dentro de $BqM(B. Tan pronto como su estado pase a Gst::Element::STATE_PLAYING, el hilo se iniciarpor si solo. Nunca es necesario iterar expl$ByD(Bitamente un hilo.

== Constraints situadas en la tuber$ByB(B por el Gst::Thread

Dentro de la tuber$ByB(B, todo transcurre igual que en cualquier otro contenedor. La diferencia reside en l$ByN(Bite de hilos, en la conexi$B(B entre el hilo y el mundo exterior (el contenedor). Ya que GStreamer es fundamentalmente orientado a buffers m$BaT(B que orientado a bytes, la soluci$B(B natural a este problema es un elemento que pueda realizar un buffer de los buffers de cada hilo (valga la redundancia), de un modo seguro ("thread-safe"). Este elemento es la cola (Gst::Queue), que se descibe en el cap$ByU(Bulo ((<Colas|tut-gst-queues>)). No importa que la cola forme parte del contenedor principal o del hilo mismo, pero es necesario que estpresente en al menos uno de los dos lados para permitir la intercomunicaci$B(B entre ambos.

== $B?C(Bu$Ban(Bdo hay que usar hilos?

Si se estescribiendo una aplicaci$Bsn(B con GUI, haciendo del contenedor principal un hilo se consigue que la GUI tenga mejor respuesta. Si en su lugar tenemos una tuber$Bma(B, esta deberser iterada por ciclo de eventos de tu aplicaci$Bsn(B, lo cual incrementa el tiempo entre eventos (presiones de tecla, por ejemplo) y la respuesta de la GUI. Adem$Bas(B, cualquier peque$Bqo(B retardo en el GUI retrasarla iteraci$Bsn(B de la tuber$Bma(B, que puede causar (por ejemplo) saltos en la salida por tarjeta de sonido, en el caso de una tuber$Bma(B de audio.

Un hilo se puede visualizar de esta forma:

{{image_left("thread.png")}}
{{br}}

Como ejemplo pr$Bac(Btico, puede leer el c$Bsd(Bigo fuente de nuestro ((<Simple Audio Player>)).






ruby-gnome2-cvs メーリングリストの案内
アーカイブの一覧に戻る