1

私は winapi (C) を使用して、次のようにポートを作成して、comport からバッチを読み取ります。

hSerial= CreateFile(COM5, 
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING, 
FILE_ATTRIBUTE_NORMAL |FILE_FLAG_NO_BUFFERING, 
NULL);   

次に、 lengthIn long である Data にバッチを読み込みます。

ReadFile(hSerial,Data,lengthIn,lengthOut,NULL)

lengthOut は、実際に読み取られたデータの量を表します。

各反復で lengthIn バイトを実際に読み取る必要があり、それ以下ではないことを確認する必要があります。どうすればよいですか? 毎回 lengthIn=lengthOut を確認するにはどうすればよいですか?

ポートの作成中の属性(FILE_FLAG_NO_BUFFERINGなど)と関係があると思いますが、どれがどのように機能するのかわかりません。

4

1 に答える 1

2

通信ポート ハンドルのタイムアウトを十分に大きく設定すると、ReadFile指定したバイト数が読み込まれるまで (またはエラーが発生するまで) 戻りません。

COMMTIMEOUTS詳細については、構造に関するドキュメント( http://msdn.microsoft.com/en-us/library/windows/desktop/aa363190(v=vs.85).aspx ) を参照してください。

于 2013-04-08T08:30:46.527 に答える