問題タブ [overlapped-io]

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 に答える
2416 参照

windows - ConnectEx では、ソケットを「最初にバインド」する必要がありますが、何に対してですか?

ConnectEx関数には、「接続されていない、以前にバインドされたソケット」が必要です。実際、私の例でバインド手順を省略した場合 (以下を参照)、ConnectExはWSAEINVALで失敗します。

これが私の現在の理解です: ConnectExを呼び出す前に、ソケットをポート 0にバインドINADDR_ANYします(既にバインドされていない場合):

または IPv6 ソケットの場合:

これにより、オペレーティング システムはローカル アドレスをソケットに割り当てることができます (接続先のリモート アドレスとは対照的です)。 connectはこのステップを自動的に行いますが、ConnectExは行いません。

私の質問は次のとおりです。

  1. 私の評価は正しいですか?

  2. アドレスファミリに依存しないこの自動バインドを行う方法はありますか、または、、、(Bluetooth) などを手動で処理するAF_INET必要がAF_INET6ありますか?AF_BTH

ConnectEx の動作例 (Gist にもあります: https://gist.github.com/4158972 ):

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

c++ - wxWidgetsアプリケーションで重複したIO

名前付きパイプを介してサービスプロセスから非同期通知を受信するWindows専用のwxWidgetsGUIアプリケーションに取り組んでいます。パイプハンドルの監視用に別のスレッドを生成することは避けたいと思います。したがって、オーバーラップしたIOを使用することを考えています。私の質問は、メインスレッドのパイプハンドルの通知を受信する最も簡単な方法は何でしょうか?

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

windows - 保留中または中止されたオーバーラップ ReadFile 操作から読み取られたバイト数を取得する方法

この関数を使用して、成功したオーバーラップ (非同期)操作GetOverlappedResult()から読み取りバイト数を取得できます。ReadFile()

操作がまだ保留中または中止された後に、読み取りバイト数を取得する方法が見つかりません。このGetOverlappedResult()関数は、どちらの場合も読み取りバイト数を 0 に設定しているようです。それを行う方法はありますか?

編集: この非同期 I/O 操作は、COM ポートを介して組み込みデバイスからデータを取得するために実行されます。タイムアウト後、操作は中止されます。デバッグ目的でのみ、操作が中止される前に受信したバイト数が必要です。

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

c++ - 非同期I/Oコールバックメソッドの同時実行性

同時実行性が心配なコールバックを使用して非同期I/Oを実装しました。私は常に同じファイルで作業しており、OSファイルの物理I / Oは基本的に同期操作であるため、コールバックメソッドにロックメカニズムは必要ありませんが、ここでは間違っている可能性があります。 --SO:oと入力します)読み取り操作が完了したときに読み取りデータをバッファーキャッシュに入れるバッファーマネージャーと、EOverlappedStates列挙状態に基づく重複操作ごとの状態エンジンがあります。「I/Oが開始されていません」、「成功」、および「エラー」。私たちのようなマルチスレッドプログラムで同時実行性を確保するために、コールバックメソッドをロックする必要があると思いますか?

ファイルを開く:

ファイルの読み取り:

拡張オーバーラップ構造:

コールバックメソッド:

使用法:

0 投票する
0 に答える
293 参照

task-parallel-library - NativeOverlapped または System.Threading.Overlapped は、PFX IOTaskScheduler でどのようなシナリオで役立ちますか?

PFX チームのParallel Extensions Extras DLLを見ていると、 NativeOverlappedおよび System.Threading.Overlapped メソッドを使用するIOTaskSchedulerが表示されます。

各拡張機能がいつ役立つかについてのドキュメントはあまりないため、ソース コードを読んで、特定の関数をいつ使用する必要があるかを判断するのは私次第です。

IOTaskScheduler または NativeOverlapped 機能はいつ使用しますか?

(ソースコードへの直接リンク) (このページの下部にあるドキュメント)

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

winapi - 重複した IO またはファイル マッピング?

Windows アプリケーションには、ファイル名とバッファをラップするクラスがあります。ファイル名でそれを構築し、オブジェクトをクエリして、バッファがまだいっぱいかどうかを確認できます。そうでない場合は nullptr を返し、そうである場合はバッファ アドレスを返します。オブジェクトがスコープ外になると、バッファが解放されます。

データを非同期的にメモリに入れたいのですが、私が見る限り、2 つの選択肢があります。バッファを作成して ReadFileEx を介してオーバーラップ IO を使用するか、MapViewOfFile を使用して別のスレッドのアドレスにアクセスします。

現時点では、約 16MB を超えるリクエストは失敗する傾向があるため、いくつかの問題を提示する ReadFileEx を使用しています。バッファ クリーンアップの問題があります。また、クラスの複数のインスタンスが立て続けに作成されると、非常に面倒になります。

上限の問題がないため、別のスレッドでのデータのマッピングとタッチはかなり簡単に思えます。また、クライアントが今すぐデータを絶対に取得する必要がある場合は、単にアドレスを逆参照して、OS に心配させることができます。ページ フォールトが発生し、ブロッキング ヒットが発生します。

このアプリケーションはシングル コア マシンをサポートする必要があるため、私の質問は次のとおりです。別のソフトウェア スレッドでのページ フォールトは、現在のスレッドでのオーバーラップ IO よりも高くつくのでしょうか? 彼らはプロセスを停止しますか?オーバーラップした IO は同じようにプロセスを停止させますか、それとも私が理解できない OS マジックがありますか? ページ フォールトはオーバーラップ IO を使用して実行されますか?

私は次のトピックをよく読んで ます 。 microsoft.com/en-us/library/windows/desktop/aa366556(v=vs.85).aspx (ファイル マッピング) しかし、パフォーマンスのトレードオフを行う方法を推測できないようです。

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

c - GetOverlappedResult にファイル ハンドルが必要なのはなぜですか?

なぜGetOverlappedResultファイルハンドルが必要なのですか?

WaitForSingleObject(overlapped->hEvent)オーバーラップした I/O が終了するまでイベントを待機するだけで十分なように思えGetOverlappedResultますが、ファイル ハンドルは何に使用されるのでしょうか。

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

c++ - Windows での同時読み取りと書き込みのための重複した名前付きパイプの使用

オーバーラップとして作成されたパイプ ハンドルがあります。データを並行して読み書きする必要があります。どうすればこれを達成できますか?

オーバーラップされた I/O を使用する名前付きパイプ サーバーのドキュメント ページには、多くのパイプを読み書きする方法の例が示されていますが、「単一のパイプ インスタンスでの同時操作が回避されます」。

Windows上のC++でこれを行う正しい方法は何ですか? 適切な例を提出することも、トピックに関するヘルプを提出することもできません。

私が直面する主な問題は、読み取るデータがなく、最終的には WriteFile で書き込むことができない場合に、通常の ReadFile がブロックすることです。ブロックしない読み取り対象があるかどうかを教えてくれる方法は見つかりませんでした。私が理解している限りでは、OVERLAPPED 構造体を渡す必要がありますが、1 つのパイプ (多くない) への並列読み取りと書き込みの場合にそれを使用する方法がわかりません。

Synchronous and Overlapped Pipe I/Oで述べられているように、可能である必要があります。

オーバーラップ操作により、1 つのパイプでデータの読み取りと書き込みを同時に行うことができ、1 つのスレッドで複数のパイプ ハンドルに対して同時に I/O 操作を実行できます。