掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
ReadFileで正しく受信データを取得するには? (ID:60918)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
実際の受信部分(スレッド)です。 (ちなみにDLLです) -------------------------------------------------- DWORD WINAPI COM_Thread(LPVOID pData) { DWORD dEvent, dError, dByte; COMSTAT Comstat; BOOL b = FALSE; char cBuf[256] = ""; while(bThread) { //←スレッド稼動中はtrueであるbool型フラグ WaitCommEvent(h_Com, &dEvent, NULL); //←h_Comはポートハンドル switch( dEvent ) { case EV_RXCHAR: ClearCommError(h_comHDL, &dError, &Comstat); if(Comstat.cbInQue) { // 受信データサイズ分バッファから読み出し b = ReadFile(h_comHDL, cRevBuf, Comstat.cbInQue, &dByte, &revop); if(GetLastError() == ERROR_IO_PENDING) { //★1 } if(!b) { //★2 } // ここで受信データを処理する予定 } break; default: break; } } return 0; } -------------------------------------------------- 非同期で受信しているせいで、ReadFile時にデータ全部がcBufバッファに入りきっていないのかな?(非同期通信だと受信データを読み込み終わらない内に関数から返ってきてしまうようなので)と思いまして調べてみましたら、 『ReadFileでまだデータを受信し切れてなければReadFileの返り値がFALSE、またはGetLastError()の返り値がERROR_IO_PENDINGになります』とヘルプにあったので、★1、★2部分で確認しましたがどちらのif文にも入ってこないのです。 それなのに、ReadFile後cBufの中身を見てみると最後のデータしか入っていなくて・・・ もうどうしたらいいのかわかりません。どうかご教授いただけるとありがたいです。 どうかよろしくお願いします。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.