質問

WindowsのDirectSoundからLinuxのAlsaにオーディオミキサーを移植しています。システムを使用して「投票」を呼び出す16のファイル記述子を投票しています。今、私は何らかの形で投票を中止できる必要があります。 Windowsでは、イベントを使用してwaitformultipleObjectsを使用しています。待機を中止する必要がある場合は、待機を引き起こすイベントの1つでseteventになりました。投票が返されるように、Linuxの「Ready」のファイル記述子をマークする方法はありますか?

私はPPOLLを見ましたが、私は信号に精通していないので、不必要な人種の状態を処理したくありません。つまり、ALSAがファイル記述子を「準備ができている」ように設定できる場合、私もできるはずです;)

役に立ちましたか?

解決

を使用してパイプを作る場合 pipe() 関数、出力の端をあなたに追加できます poll() リスト。その後、パイプの入力端に何かを書き込むと、投票が戻ります。 Windowsバージョンと同じです。

スレッドや信号ハンドラーのような非同期を使用して、その機能を作成する必要があります。

別のオプションは使用することです sigaction() 信号ハンドラーを設定します それなし SA_RESTART 国旗。未使用の信号を次のように使用できます SIGUSR1 またはリアルタイム信号の1つ。中断したいとき poll() 次に、その信号を送信します poll() -1で戻り、errnoはeintrに設定されます。

別の信号があなたを中断する可能性があります poll() 同様に、使用しない限り sigmask() 不要な信号をブロックします。

他のヒント

タイムアウトを使用して、出口条件を確認します。

while (not exit_condition):
    int poll(struct pollfd *fds, nfds_t nfds, int timeout);
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top