
シリアル通信で10Byte受信するまで待ち続けたいのですが、0ByteでReadFileが抜けてしまいます。
ReadFileの最後のパラメタが、NULLならば第3パラメタの値まで待ち続けると思っていたのですが、なにか設定が足りないのでしょうか?
タイムアウト値は0にしています。(色々変えて見ましたが同じでした)
HANDLE hComm; /* シリアルポートのハンドル */
DCB dcb;
char* pszBuf="1234567890"; /* 書込・読込領域 */
hComm = CreateFile("COM1",
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
GetCommState(hComm, &dcb); /* DCB を取得 */
dcb.BaudRate = 9600;
dcb.ByteSize = 8;
dcb.Parity = NOPARITY;
dcb.StopBits = ONESTOPBIT;
dcb.ReadIntervalTimeout = 100;
dcb.ReadTotalTimeoutMultiplier = 0;
dcb.ReadTotalTimeoutConstant = 0;
dcb.WriteTotalTimeoutMultiplier = 10;
dcb.WriteTotalTimeoutConstant = 500;
SetCommState(hComm, &dcb); /* DCB を設定 */
DWORD dwRead; /* ポートから読み出したバイト数 */
ReadFile(hComm, pszBuf, 10, &dwRead, NULL);
No.1ベストアンサー
- 回答日時:
ReadFileが正常終了しているかどうかは確かめたでしょうか。
正常終了していない場合、GetLastErrorでエラーの原因を取得して調べることができます。また、提示されたプログラムコードは誤っておりコンパイルできません。せめてコンパイルくらいはできるコードを提示しましょう。
この回答への補足
早々のご回答ありがとうございます。
ReadFileは正常終了していますが、
ポートから読み出したバイト数は「0」です。
コンパイルエラーは、タイムアウト設定の処理を
コピーし忘れていました。
HANDLE hComm; /* シリアルポートのハンドル */
DCB dcb;
char* pszBuf="1234567890"; /* 書込・読込領域 */
hComm = CreateFile("COM1",
GENERIC_READ | GENERIC_WRITE,
0,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);
GetCommState(hComm, &dcb); /* DCB を取得 */
dcb.BaudRate = 9600;
dcb.ByteSize = 8;
dcb.Parity = NOPARITY;
dcb.StopBits = ONESTOPBIT;
SetCommState(hComm, &dcb); /* DCB を設定 */
// タイムアウト設定
COMMTIMEOUTS to;
to.ReadIntervalTimeout = 0;
to.ReadTotalTimeoutMultiplier = 0;
to.ReadTotalTimeoutConstant = 0;
SetCommTimeouts(hComm,&to);
DWORD dwRead; /* ポートから読み出したバイト数 */
DWORD dwErrors; /* エラー情報 */
COMSTAT ComStat; /* デバイスの状態 */
ClearCommError(hComm, &dwErrors, &ComStat);
ReadFile(hComm, pszBuf, 10, &dwRead, NULL);
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
シリアル通信の出力バッファと送信完了イベントについて
C言語・C++・C#
-
WriteFile()でのデータ送信ができなくなる
C言語・C++・C#
-
C# シリアル通信でデータ受信時の欠損について
C言語・C++・C#
-
-
4
WaitCommEventのタイムアウトについて
C言語・C++・C#
-
5
シリアル通信プログラム(受信)について
C言語・C++・C#
-
6
シリアル通信 大きいサイズの受信処理
C言語・C++・C#
-
7
ClearCommError呼び出し時のCE_OVERRUN対処策
C言語・C++・C#
-
8
ReadFile(GPSとの通信)Win7での挙動
C言語・C++・C#
-
9
CStringからchar*への型変換について教えてください。
C言語・C++・C#
-
10
RS232Cケーブル ストレートとクロスを見分ける方法
その他(パソコン・周辺機器)
-
11
シリアルの送信完了を待つ方法
UNIX・Linux
-
12
ReadFileについて
C言語・C++・C#
-
13
VBA2005 16進を2桁で表示したい。
Visual Basic(VBA)
-
14
<unistd.h>をVisualStudioでつかえるようにする
C言語・C++・C#
-
15
std::stringからLPCWSTR型への変換
C言語・C++・C#
-
16
VB2005でWin32APIを用いてRS-232CのRTS信号を、デ
Visual Basic(VBA)
-
17
wsprintf関数の使い方について
C言語・C++・C#
-
18
win10で、正確な待ち時間の作り方
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
<unistd.h>をVisualStudioでつ...
-
VC++6.0 で使用可能な、"Platfo...
-
Visual Basic.NETの処理速度は6...
-
コンパイル時のスイッチについて
-
c言語です コンパイルした時に...
-
notepad++でのコンパイル設定
-
arduinoのエラーメッセージ
-
プログラムのexe化
-
MVSマシンで0C7でABENDしたので...
-
VBで作成したOCXでバージョンが...
-
EXEファイルの逆コンパイル
-
exe書き込み時のエラーについて。
-
C言語のグローバル変数の初期...
-
#If True Then の # って何??
-
#defineとconstについて
-
共有ライブラリの内容確認について
-
自作DLLの中身を暗号化
-
gcc バージョン違いによるコン...
-
boostを利用したプログラムのコ...
-
C#で char型とstring型の比較で...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
<unistd.h>をVisualStudioでつ...
-
アプリケーションのDLLファイル...
-
共有ライブラリの内容確認について
-
64ビットのlinuxで32ビットメモ...
-
プレコンパイルの意味を教えて...
-
math.hに含まれる関数が使えない
-
c言語です コンパイルした時に...
-
ビープ音が鳴りません・・・
-
C言語で、配列を使ったsinカー...
-
Cのコンパイルでコメントアウト...
-
すべてのリビルド: 0 正常、 0 ...
-
MVSマシンで0C7でABENDしたので...
-
Delphiでクラスをオブジェクト...
-
#If VBA7 Thenに関して
-
DLLは解読可能ですか
-
C#で char型とstring型の比較で...
-
[COBOL] ソースの復帰
-
gcc バージョン違いによるコン...
-
gccでc++プログラムをコンパイ...
-
シリアル通信の受信待ちについて
おすすめ情報