none
DeviceIoControlで非同期 RRS feed

  • 質問

  • USBのバルク通信をやるのですが、DeviceIoControlを非同期で使おうとしています。

    あるPC(XP)ではDeviceIoControlの戻り値が0でlastErrorがERROR_IO_PENDINGとなるのですが。

    他のPC(XP,2k)ではDeviceIoControlの戻り値が1となり、待ち状態に陥ってくれません。

    ただしDeviceIoControlでのデータのやり取りはうまくいっています。

    どういったことが考えられますでしょうか?

    待ち状態に陥ってほしい理由は、DeviceIoControlの後にWaitForSingleObjectで

    USB通信のタイムアウトを待ちたいところによります。

    初心者で申し訳ありません。

    どなたかご教授お願い致します。

     

     

     

    2008年4月4日 11:42

すべての返信

  •  初心者568083 さんからの引用

    あるPC(XP)ではDeviceIoControlの戻り値が0でlastErrorがERROR_IO_PENDINGとなるのですが。

    他のPC(XP,2k)ではDeviceIoControlの戻り値が1となり、待ち状態に陥ってくれません。

     

    非同期要求するより同期呼び出しのほうが早いとドライバが判断したので

    待つ前に完了しただけではないですか?

    2008年4月5日 10:50
  • 回答有難うございます。

    DeviceIoControlの処理最中にUSBからのレスポンスがあったというのなら、そういうのもありかという気もしますが、

    USBを途中で抜いた場合でも、(タイムアウト)待ち状態にこないので固まってしまいます。

    意図する動作となるPC(今のところ1台)には開発環境(VC6)が入っています。

    待ち状態とならないPCには開発環境が入っているものと、いないものがあります。

    2008年4月7日 0:50