掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
シリアル通信でのフロー制御 (ID:18156)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
達人テクニックについてきた TComm を使ってデータ送信するプログラムを書いています。 送信先の機械のバッファサイズがあまり大きくないないため、総送信サイズが大きくなると おそらくバッファオーバーフローで、正しい結果が得られません。 送信側・受信側共にフロー制御をXon/Xoffで行っています。 Windows側が勝手にフロー制御してくれるものだとばかり思っていたのですが、 どうも違うような気がしてきましたが、ネットで検索しても手がかりに鳴りそうな 情報がみつかりません。 そこで質問なのですが、 このとき、Xoffが送られてきたことを検出するには、どうしたらいいのでしょう? 勝手に止まってくれると思っていたのですが、どうも停止する様子もありませんし、 Xoffを検出して、自分で送信を止めるものなのでしょうか? Windowsが勝手にやってくれるものだから、やっぱり不要なのでしょうか? 実際に書き込んでいる部分は、このようになっています。 丸々コピーですが、流れとしては、TCommX等の別のコンポーネントと同じようになっています。 if not WriteFile(FHandle, Buffer, Size, dwBytesWritten, @FWriteOs) then begin if GetLastError = ERROR_IO_PENDING then // オーバーラップ処理時 begin WaitForSingleObject(FWriteOs.hEvent, INFINITE); while not GetOverlappedResult(FHandle, FWriteOs, dwBytesWritten, True) do begin if GetLastError = ERROR_IO_INCOMPLETE then // まだ完了しない Continue else begin ClearCommError(FHandle, dwError, @Stat); Break; end; end; end else begin // その他のエラー発生 ClearCommError(FHandle, dwError, @Stat); raise ECommReadWriteError.Create(dwError); end;
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.