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>)).