動作環境
C++ Builder XE4
擬似コード
while(!UDP受信(50msec).IsEmpty);
UDPコマンド送信;
UDP受信処理;
50msecごとに受信しているのは何をしているのか?
推測
コマンド送信の前に受信バッファ内をすべて読込むことで空にしている、という処理のようだ。
コメント: 意図について記載する
以下のようにすると意図が分かる。
// 受信バッファのクリア
while(!UDP受信(50msec).IsEmpty);
UDPコマンド送信;
UDP受信処理;
意図のコメントはある方がいいと思うが、それ自体を書かないスタイルの人はいる。
さらに、!
を使っているため、手違いで!
を消してしまうと追跡不能な不具合に発展する。
失敗
上記のコードに別の不具合対策をするうちに、!IsEmpty()の論理をIsEmpty()の論理にする失敗をしていた。
その時点で、以下の間違った考えを持っていた。
- 間違い
- 受信バッファが空の間はUDP受信を50msecごとにする
- 受信バッファが入った時点で後の処理をする
- 正しい
- 受信バッファを空にする
- 受信バッファが空の状態で後の処理をする
前者はプログラムが「命令受信側」として使う実装で、後者はプログラムが「命令送信側」として使う実装である。