08/02/17 03:37:13
質問しようとスレ検索したらこんなんかいw
ReadFile() 使って USB デバイスから到着するデータパケット (で良いのかな? 用語不詳) を
読み込んでるんですが、まぁ具体的には読み込みを別スレッド化してキュー経由で取り出せる
ようにしてみたんですけどね。読み込みが I/O ブロックに入ってしまうと同じハンドルの WriteFile()
もブロックされてしまうようになって転送中断も終了も出来なくなります。
I/O ブロックに入らないよう WaitForSingle/MultiObject() で確認しようと思ったのですが、USB デバ
イスのハンドルだとシグナル状態がないのか、うまく機能してくれないようで。何かオプションとか
間違ってるんでしょうか?
// オープン
CreateFile(device_path, GENERIC_READ | GENERIC_WRITE, 0, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
// 読み込み (2種類)
#define IOCTL_ASYNC_IN CTL_CODE (FILE_DEVICE_UNKNOWN, 0x850, METHOD_BUFFERED, FILE_ANY_ACCESS)
ReadFile(handle, temp, MAX_BUFFER_SIZE, &length, NULL);
DeviceIoControl(handle, IOCTL_ASYNC_IN, 0, 0, temp, sizeof(temp), &length, NULL);
// 書き込み
WriteFile(handle, buffer_array, length, &dummy, NULL);