• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:HIDでReadFileのタイムアウトを設定したい)

HIDデバイスと通信する際のタイムアウト設定方法と受信待ちストップの解決策

このQ&Aのポイント
  • HIDデバイスと通信する際にReadFileのタイムアウトを設定したい場合、SetCommTimeoutsは使用できないため、他の方法を探す必要があります。
  • ReadFileは通信モードに入っていないとデバイスからの受信待ちを続けてしまうため、ストップする方法が必要です。
  • HIDデバイスとの通信でタイムアウトを設定する方法や受信待ちでストップしない解決策について、詳細な方法をご教示いただけませんでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • haniriito
  • ベストアンサー率57% (12/21)
回答No.1

回答が遅くて、もう見てないかな・・・ HIDではやったことは無いのですが、非同期I/Oは使えませんかね? CreateFileするときにFILE_FLAG_OVERLAPPEDフラグを指定しておいて、 ReadFileのときにはOVERLAP構造体を与えます。 ReadFile自体はすぐにreturnしてきます(ERROR_IO_PENDINGが返される)ので、 OVERLAP構造体に指定したイベントの完了を待ってReadFileの完了を確認できます。 このとき、WaitForSingleObjectに有限のタイムアウト時間を指定すれば、 指定時間内に有効なデータ受信されなかったことが分かります。 この説明で分からなければ、どこが分からないかを再度質問して下さい。 上に書いた手順では、ReadFileからreturnしてきて(あるいはタイムアウトして)別の処理を行うことができますが、 そのReadFile自体はシステム内部でまだ継続しているはずです(PCからHIDに対してデータの読み込みトランザクションが継続している状態)。 これもキャンセルするには、更にCancelIOというAPIが使えそうです(が、試したわけではありません)。 あ、それとSetCommTimeoutsはご推察通りシリアル限定です。

fillet_o_fish
質問者

お礼

回答ありがとうございます。 やっぱり、ソレしかないのかー。 CancelIOは知らなかったので純粋に助かりました。 おかげで踏ん切りついたので、あらためてがんばります。 ほんとありがとう!

関連するQ&A