こちらで書かせてもらったWindows 10のUSB CDCの件、待っていても仕方ないので対方法を検討してみた。
結論から言ってしまうと、受信イベントのタイミングでReadFileすると、バッファ内のデータを読み込み切らずに終了するという事。残ってしまったデータは次の受信イベントが起こらない限り読み出すイベントが無い。その受信イベントは新たな受信データが無いと励起されない。
デバッガを起動していたりAPIのフックをしてたりすると若干改善したりする。
ブロッキングなら大丈夫だが、イベントドリブンな作りのアプリケーションでノンブロッキングだと解決できないネタだった。
ドライバの更新に期待していても始まらないので、それなりの改善が見受けられた方法だけ備忘録として。
とりあえず受信イベント直後のReadFile後にWindowsのメッセージを強制的にディスパッチし、受信バッファのQueueをチェックして再度ReadFileするといった方法。
これにより、マンマシン的なものであればごまかしが効くぐらいには改善する。
技術サポート