snd_rawmidi_open() は永遠に待ちます - エラーメッセージはありません

snd_rawmidi_open() は永遠に待ちます - エラーメッセージはありません

MIDI目的でCでALSAを使用しようとしています。

私の問題は、貴重な引数を使用するときにsnd_rawmidi_open()の種類の「衝突」(whileループのように永遠に待機)ということです。

#include <stdio.h>
#include <stdlib.h>
#include <alsa/asoundlib.h>

int main(int argc,char** argv)
{
    snd_rawmidi_t *handle_in = 0;
    int err;
    fprintf(stderr, "TEST 1\n");
    err = snd_rawmidi_open(&handle_in,NULL,"hw:1,0,0",0);
    fprintf(stderr,"TEST 2\n");
    if (err) {
        fprintf(stderr,"snd_rawmidi_open failed: %d\n",err);
    }
    fprintf(stderr, "TEST 3\n");
    exit(0);    
}

「hw:1,0,0」はMIDIキーボードです。 「foo」などの誤った値を使用するとエラーが発生します。有効な場合、プログラムは「TEST 1」を表示し、一時停止します。

どんなアイデアがありますか?

とても感謝しています!

答え1

デフォルトでは、snd_rawmidi_open要求を待つポートは使用可能です。

これを望まない場合は、このフラグを追加してください(SND_RAWMIDI_NONBLOCK読み取り/書き込み呼び出しを防ぐためにリセットしてください)。snd_rawmidi_nonblock()

関連情報