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

アーカイブの一覧に戻る

ruby-gnome2-hiki-pt_BR****@sourc***** ruby-gnome2-hiki-pt_BR****@sourc*****
2004年 4月 11日 (日) 09:13:51 JST


-------------------------
REMOTE_ADDR = 200.216.145.78
REMOTE_HOST = 
        URL = http://ruby-gnome2.sourceforge.jp/pt_BR/?tut-gst-threads
-------------------------
= Threads
{{link("tut-gst-types", nil, "tut-gst", "tut-gst-queues")}}

O GStreamer tem suporte para "multithreading" atrav$BqT(B do uso de objeto de Gst::Thread. Esse objeto de fato um Gst::Bin especial que se tornarum thread quando for iniciado.

Para construir um novo thread, vocfaralgo como: 

  # cria o objeto de thread
  thread = Gst::Thread.new

  # adiciona alguns plugins aqui
  thread.add(funky_src, cool_effect)

  # conecta os elementos aqui
  ...

  # inicia a tocar
  thread.play

O programa acima criarum thread com dois elementos nele. T$BeP(B logo ele seja configurado para o estado Gst::Element::STATE_PLAYING, o thread iniciara iteragir. Vocnunca precisa iteragir explicitamente um thread.

== Restri$Bnw(Bes Colocadas no "Pipeline" por um Gst::Thread

Dentro do "pipeline", tudo a mesma coisa como em qualquer outro "bin". A diferen$BmB(B fica nos limites do thread, na conex$BeP(B entre o thread e o mundo externo (contendo o "bin"). Como o GStreamer fundamentalmente orientado a "buffer" em vez de orientado a byte, a solu$Bne(Bo natural para esse problema um elemento que pode "buffer" os "buffers" entre os threads, de uma maneira "thread-safe". Esse elemento a fila (Gst::Queue), descrita mais completamente no cap$ByU(Bulo chamado ((<"Queues"|tut-gst-queues>)). N$BeP(B importa se a fila colocada no "bin" contido ou no thread, mas ela precisa em um lado ou no outro para habilitar a comunica$Bne(Bo "inter-thread".

== Quando VocGostaria de Usar um Thread?

Se vocestescrevendo uma aplica$Bne(Bo de GUI, fazer o "bin" de n$ByW(Bel superior um thread tornara sua GUI mais responsiva. Se fosse um "pipeline", ela teria que ser iteragida pelo loop de evento da sua aplica$Bne(Bo, o que aumentaria a lat$BsO(Bcia entre os eventos (digamos, digitar no teclado) e resposta da GUI. Em adi$Bne(Bo, qualquer pequeno travamento na GUI atrasaria a itera$Bne(Bo do "pipeline", o que (por exemplo) poderia causar pulos na sa$ByE(Ba da placa de som, se fosse um "pipeline" de $BaV(Bdio.

Um thread pode ser visualizado abaixo:

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

Um exemplo pr$BaU(Bico, vocpode ler as fontes do nosso ((<Tocador de Audio Simples>)).





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