問題タブ [cancelio]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
634 参照

windows - CancelIo() は、既に読み取られたバイトに対して何をしますか?

10 バイト (タイムアウトなしのオーバーラップ モード) で、 5 バイトが読み取られた後にReadFile()呼び出すとどうなりますか? CancelIo()のドキュメントにCancelIo()は、保留中の I/O をキャンセルすると書かれていますが、既に読み取られた 5 バイトはどうなりますか? 彼らは失われていますか?それらは再エンキューされているので、次回ReadFile()はそれらを再度取得しますか?

何らかの方法で示す仕様を探しています。経験的な証拠に頼りたくない。

0 投票する
4 に答える
4456 参照

windows - CancelIo() がいつ完了したかを調べる方法は?

CancelIo()は、呼び出しスレッドに関連付けられたすべての保留中のI/O 操作をキャンセルすることになっています。私の経験では、CancelIo() は将来のI/O 操作もキャンセルすることがあります。与えられた:

  1. CancelIo(port)読み取りの直前に呼び出すGetQueuedCompletionStatus()と、読み取り操作を受け取ることはなく、永久にブロックされます。
  2. CancelIo(port)読み取りの直後に呼び出すと、 GetQueuedCompletionStatus()0 が返されますGetLastError()==ERROR_OPERATION_ABORTED
  3. 私が呼び出しCancelIo(port)、保留中または後続の読み取りがない場合、GetQueuedCompletionStatus()永遠にブロックされます。

ここで重要な点は、 のCancelIo()実行がいつ終了したかを検出する方法がないことです。CancelIo()実行が完了し、さらに読み取り要求を発行しても安全であることを確認するにはどうすればよいですか?

PS: http://osdir.com/ml/lib.boost.asio.user/2008-02/msg00074.htmlおよびhttp://www.boost.org/doc/libs/1_44_0/doc/html/を参照してください。 boost_asio/using.html CancelIo() は実際には使用できないようです。お客様は Windows XP のサポートを必要とする必要があります。私のオプションは何ですか?

:シリアルポートから読んでいます。

0 投票する
4 に答える
1119 参照

winapi - CancelIo が失敗した場合はどうなりますか?

を呼び出す理由はいくつかありますCancelIoが、私の特定のケースでは、システムがバッファに書き込んでいないことを知るために呼び出しています。それがわかれば、バッファを安全に解放できます。

しかし、CancelIo失敗した場合はどうなりますか?私が今行っていることは、明示的にバッファをリークして例外をスローすることです。これに対処するより良い方法はありますか?

PS エウロパ、ガニメデ、カリストの類似の呼び出しが欠落しているようです。バグを報告する必要がありますか?

0 投票する
1 に答える
446 参照

c# - CancelIo関数が失敗するのはなぜですか?

以下のコードを書きました。このメソッドを呼び出して、3つの別々のスレッドを使用して3つの異なるハードディスクに書き込みます。CancelIo呼び出しの1つが失敗しています(falseを返します)。

ディスクは大丈夫だと思います(ハードウェアは問題ありません)。

どうすればいいの?

(ディスクを変更した後、別のディスクで再び発生しているのがわかります。)

0 投票する
1 に答える
776 参照

visual-c++ - 関数 CancelIO() および GetOverlappedResult() が wi​​n32 API にありません

関数 CancelIo と GetOverlappedResult が見つかりません

関数 CancelIO は次のように説明されています。 CancelIO 関数は、指定されたファイル ハンドルの呼び出しスレッドによって発行されたすべての保留中の入出力 (I/O) 操作をキャンセルします。この関数は、他のスレッドによってファイル ハンドルに対して発行された I/O 操作をキャンセルしません。

関数 GetOverlappedResult は、指定されたファイル、名前付きパイプ、または通信デバイスでオーバーラップした操作の結果を取得すると説明されています。タイムアウト間隔を指定するか、アラート可能なスレッドで待機します。

これらは、windows.h では定義されていません。ヘッダーファイルはどこにありますか? または、それらを置き換えることができる同等の機能はありますか?

0 投票する
1 に答える
483 参照

c++ - CancelIoEx : 関数ポインタ typedef

次のコードは、MS Async Filter からコピーしたものです。次のコードは、CancelIo または CancelIoEx のいずれかを呼び出していると想定されます。とにかく CancelIoEx がどこで呼び出されているのかわかりません。typedef は CancelIoEx を表していると想定されていますが、呼び出されることはありません。ラインは正確に何をしているのbResult = (pfnCancelIoEx)(m_hFile, NULL);ですか?