10

C (gcc) と ncurses を使用して、シリアル ポートからのデータを監視するプログラムを作成しています。プログラムにはwhile、ポートからのデータを読み取ると同時に、その情報を画面に出力する大きな .

しかし、問題はここにあります:

どうすればキーボードから入力を読み取ることができますか (getch()入力を取得するまでプログラムをフリーズするため)、同時にポートからの情報を読み取ることができますか?

多分私は別の方法を使わなければならないでしょう(大きなものではないwhile)ので、アイデアは大歓迎です!

4

5 に答える 5

8

nodelayオプションを使用してgetchを非ブロッキング呼び出しにします。

nodelay(stdscr,TRUE);

詳細については、http://www.gsp.com/cgi-bin/man.cgi?topic=nodelayを参照してください。

于 2010-10-15T06:30:45.407 に答える
0

環境によっては、関数 kbhit() を使用している可能性があります。キーボード バッファーでピークに達し、そこにキーがある場合はゼロ以外を返します。その後、getch() を実行できます。

(conio.h)

于 2010-10-15T06:31:36.557 に答える
0

たぶんフォーク()?子は別のプロセスで実行されるため、変数をそれらの間で直接共有できないことに注意してください

pid_t pID = fork();
if (pID == 0) { // 子
   // 子プロセスのみが実行するコード
   // getch() ...
} else if (pID < 0) { // フォークに失敗しました
   // 例外をスローします
   // ...
} else { // 親
   // 親プロセスのみが実行するコード
   // ...
}
于 2010-10-15T06:31:39.833 に答える
0

select()またはを試してくださいpoll()。どちらも同じことを行いますが、インターフェースが異なります。ファイル記述子のリストを渡すと、それらの記述子の少なくとも 1 つの準備が整うまで待機し、戻って、ブロックせずに読み取り (または書き込み) できる記述子を通知します。例と詳細については、リンクを参照してください。

于 2010-10-15T06:44:35.167 に答える
-1

cbreak()行バッファリングを無効にするために使用 します

nodelay(win, TRUE); 

これにより、ノンブロッキングgetch()機能が得られます。

于 2013-09-12T11:03:00.097 に答える