2011-12-14 6 views
2

COMポートのRDとTDピンを一緒に接続してシリアルポートの通信をテストしています。 COMポートは、以下のコードが実行される前に初期化されています。ReadFile()は空白のデータを返します

CString cs_Send = "F: 5000000 Hz, SF: 1.0, Phase: 10, Position: 50, on sample 1"; 

BOOL bWriteRC = false; 
BOOL bReadRC = false; 
DWORD iBytesWritten = 0; 
char readBuffer[256] = {"\0"}; 

DWORD read; 

bWriteRC = WriteFile(hPort,cs_Send.GetBuffer(10),cs_Send.GetLength(),&iBytesWritten,NULL); 
**Sleep(1000);// Thanks for the advice!!! this Sleep() will fix this error.** 
bReadRC = ReadFile(hPort,readBuffer,sizeof(readBuffer),&read,NULL); 

if(bWriteRC) 
{ 
    if(bReadRC) 
    { 
     AfxMessageBox(readBuffer, MB_OK); 
    } 
} 

bWriteRCとbReadRCは常にtrueを返します。しかし、最初のメッセージは完全に空白です。これを2回以上実行すると、1番目以降のすべてのメッセージは、送信したメッセージとまったく同じです。私はなぜ最初のものが常に空白であるのだろうかと思います。

答えて

2

通常、WriteFileおよびWriteFileExファンクションは、オペレーティングシステムがディスクまたは通信パイプに定期的に書き込む内部バッファにデータを書き込みます。 FlushFileBuffers関数は、指定されたファイルのすべてのバッファされた情報をデバイスまたはパイプに書き込みます。

を呼び出した後、WriteFileを呼び出してください。

詳細はFlushFileBuffersを参照してください。

+0

WriteFile()の後にFlushFileBuffers(hPort)では機能しません。 **最初のメッセージはまだ空白です。** – user1098761

+0

'ReadFile'を呼び出した後の' read'変数の値は何ですか?そして、あなたは 'CreateFile'をどのように呼び出しましたか? –

+0

'' char csize [256] = {"\ 0"};を追加し、ReadFile()の後にitoa(read、csize、10);を追加します。最初の値は常に0で、次の値は61です。CreateFile()はよく呼び出され、テストの前に常に初期化されています。 1バイトの送信が成功し、CString-wiseテストを完了したいと考えました。 – user1098761

関連する問題