問題タブ [tui]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
go - context.Context を複数回キャンセルしますか?
でコンソール音楽プレーヤーに取り組んでいGoます。ユーザーがアルバムを選択して再生するたびに、ゴルーチンを起動してプレイリストをループします。
ユーザーが新しいアルバムを選択したときに、このゴルーチンをキャンセルする方法が必要です。私はそうしています(しかし、それが最善の解決策であるとは確信していません)。context.Context
私はctx
したがって、UI イベント ハンドラーでplay() funcはcancel()、ゴルーチンになります。
これは、更新 UIforループ内をチェックすると機能します。
その後、チャンネルctx.Done()が閉じられ、再生される次のアルバムがループの代わりに常に返されます。
キャンセルする方法はありcontext.Contextますか?
そうでない場合、このゴルーチン (および次のゴルーチン) をキャンセルするより良い方法はありますか?
別の方法として、待機グループを使用しようとしましたが、
でもsync: WaitGroup is reused before previous Wait has returnedそのうちパニックになる
go - libvlc 再生で以前の実装
libvlcTUI で音楽を再生するために (go binding) を使用しています。media_list_playerメソッドを持つNextを使用する代わりに、この回答https://stackoverflow.com/a/44647523/4443226Previousのアドバイスに従って、通常のループとループを使用しました。media_player
これには、現在の曲のインデックスを取得でき、現在再生中の曲の位置と長さを取得できるという利点があります。
Goで実装しましたが、問題の1つは、(効果的に)実装できず、歌えないことNextですPrevious。
問題の一部は、この再生ループがUI スレッドとは別のものでなければならないことです。goroutinechan曲を停止しgoroutineてスキップするための信号を送信するために使用します。
Previousfor ループに戻ることができないため、を実装できません。
理想的には、 を使用したいと思いますlibvlc media_list_player。ただし、曲の長さと長さ、およびの曲のインデックスを取得できない場合はmedia_list、むしろこの方法を使用します。
代わりにを使用する必要がある場合media_player、ネストされたループとチャンネルを使用するよりも再生を処理するためのより良い方法はありますか? 以前を使用できるものは?