問題タブ [nonblocking]
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.
c# - C#COM相互運用機能を使用したSQLクエリ中のレスポンシブUIの最適なアプローチ
VB6で記述されたEXE用のC#DLLプラグインを作成しています。EXEのソースにアクセスできません。DLL自体が機能し、EXEと正常に通信します。
イベントのプロセスは次のとおりです。
- ユーザーがEXEでコマンドを発行すると、DLL内の関数が呼び出され、オブジェクトがパラメーターとして渡されます。
- DLLは、時間がかかることがあるデータを処理します
DLLは、渡されたオブジェクトの関数を呼び出すことによって応答します。DLL関数自体は何も返しません
/li>
私の問題は、(DLLからの)長いクエリ中に、EXEのUIがフリーズすることです。
これを防ぐための最良の方法は何ですか?非同期のMySQLクエリを使用してみましたが、これは良くありませんでした。また、複数のスレッドを使用してみましたが、保護されたメモリの問題が発生しました。
あなたが提供できるどんなアドバイスも素晴らしいでしょう。この問題に何日も対処しようとしてきました。ありがとう。
ruby - EventMachine を使用した SOAP 呼び出し
EventMachine 内でノンブロッキング SOAP リクエストを作成する方法はありますか?
adwords4r gem を使用して、Google adwords API (SOAP ベース) とやり取りする Ruby アプリケーションを作成しています。アプリケーションは EM を使用して、stomp 接続を介してメッセージを受信し、adwords API への SOAP 呼び出しを行うことによってそれらのメッセージを処理します。処理はリアクター スレッド内で行われるため、明らかに、これらの呼び出しを非ブロックにする必要があります。1 つのオプションは EM.defer を使用することですが、スレッドプール内のスレッドの束のオーバーヘッドは避けたいと思います。
c# - デバイスドライバDLLブロッキングと非ブロッキング?
私の会社は、USB経由でPCに接続する製品を製造しています。この製品用にVisualC#を使用してDLLドライバーを作成しているので、制御またはデバイス化できるプログラムを作成したい人は誰でも作成できます。ドライバーが実行する操作の一部は、デバイスが完了するまでに数秒かかります(たとえば、デバイス内でモーターを10,000ステップ移動するなど)。このドライバーに対して2つの異なるアプローチを検討していますが、どちらが理想的かわかりません。
最初のアプローチ:コマンドを非ブロッキングにします。基本的に、クライアントアプリケーションは私のdllのメソッドを呼び出してモーターの回転を開始し、そのメソッドはすぐに戻ります。次に、移動が終了したときにトリガーされるイベント「MoveFinished」があります。このアプローチにより、マルチスレッドを使用せずに、モーターの移動中にクライアントアプリケーションがフリーズしたり他の操作を実行したりすることがなくなります。
2番目のアプローチ:コマンドをブロックします。したがって、クライアントアプリケーションがMoveメソッドを呼び出すと、メソッドはブロックされ、移動が完了するまで戻りません。これにより、移動中にクライアントアプリケーションがフリーズします(マルチスレッドを使用している場合を除く)が、クライアントアプリケーションがデバイスの実行中にmoveメソッドを呼び出すなどのばかげた間違いを犯さないようにするという点でも役立ちます。すでに動いています...
誰かが共有する経験、知恵、コメントまたは考えを持っていますか?
c - ノンブロッキング ソケットへの sendfile() の完了
私のプログラムでは、ノンブロッキング ソケットでの sendfile() 操作の完了を確認する必要があります。どうすればそれができますか?
ドキュメントを確認し、インターネットで検索した後、その方法を見つけることができませんでした
c - ノンブロッキングソケットを閉じる
私はCで次のコードを持っています。
setNonBlocking 関数を使用して非ブロッキング モードでソケットを使用しています。ソケットを閉じると、アプリケーションはセグメンテーション違反などなしにすぐに終了します。setNonBlocking 関数を使用しない場合、この問題は発生しません。
この問題を起こさずにノンブロッキング ソケットを閉じるにはどうすればよいですか?
c - Select によるノンブロッキング ソケット
selectが読み取りの準備ができていることを返した後、recv()を呼び出すのを待った後、非ブロッキングソケットでrecv()を呼び出すのとブロッキングソケットでrecv()を呼び出すのとの違いがわかりません。とにかく、この状況ではブロッキングソケットが決してブロックされないように思えます。
また、ノンブロッキング ソケットを使用するモデルの 1 つは、select のようなものを使用する代わりに、一定の時間が経過した後に呼び出し (recv/send/etc) を試みることだと聞きました。この手法は、select のようなものを使用する場合と比較すると、遅くて無駄に思えます (ただし、上記のように非ブロッキングの目的がまったく得られません)。これは、今日のネットワーク プログラミングでは一般的ですか?
cocoa - Cocoa の非同期 IO を使用すると、クローズ コールに永遠に時間がかかりますか?
私はシングル スレッドの Cocoa アプリを作成しており、NSNotificationCenter
非ブロッキング IO を実行するためにユーティリティ方法論 (ココアでの処理方法のようです) を使用しようとしています。
ファイル ハンドルが閉じている場合を除いて、すべて正常に動作しているようです。最終的には通知されますが、永遠にかかります。これがなぜなのか、誰か説明できますか?
より具体的には、プロセスをフォークしてその標準出力を読み取るスクリーン セーバーを作成しています。コンテキストに基づいて動作も変化します。システム環境設定のプレビュー ウィンドウで実行しているときは、テスト ボタンをクリックしたときにフル スクリーンで実行するときよりも、閉じるときに通知が速くなります。
編集:少し考えた後、問題は最後の書き込みとクローズがほぼ同時に発生することだと思います。が閉じられた後に最後の読み取りがNSFileHandle
行われ、データが返されます (つまり、EOF ではない)。私はそれを待って終了しますが、ファイルハンドルが非アクティブであるため、実行するように通知するものがないため、メインループはブロックされたままになります。プレビュー モードが機能する理由は、[システム環境設定] ウィンドウで何かをクリックするたびに、メイン ループを強制的に実行し、NSFileHandle
待機中の状態をチェックして閉じていることを確認するためです。
これで何が起こっているのかがわかったと思いますが、NSFileHandle
ブロックせずに が閉じていることを理解する方法はまだわかりません!
さらにテストを行った結果、この問題はスクリーン セーバーの実行中にのみ発生するようです。
c# - ノンブロッキング UDP クライアントがスレッドセーフな呼び出しを受信
私は何年もの間、この問題の解決策を探していました。BeginReceive() を含む多くのことを試しましたが、すべて役に立ちませんでした。これを行う方法が必要です。非ブロッキングでスレッドセーフなUDPクライアントの受信呼び出しを行います。メッセージを受信してリッチ テキスト ボックスに書き込もうとしています。
十分なコードですよね?すべての回答に感謝します。
c - ライターが出入りするときに名前付きパイプから再読み込みする
名前付きパイプから読み取らなければならないという問題があります。名前付きパイプへのライターが行き来する状況に対処する必要がありますが、アプリケーション全体で同じパイプを開いたままにしておく必要があります。
これを次のコードにまとめました。
私が抱えている問題は、最初のプロセスが名前付きパイプに書き込み、それが終了した後、プログラムが選択をブロックしないことです。事実上、rfdが設定されており、読み取りはタイトループで読み取られたゼロバイトを返します。
rfdをNON_BLOCKINGモードにする必要があります。そうしないと、ライターが表示されるまでopenがブロックされます。
fcntlを使用してBLOCKINGモードに設定しようとしましたが、それも機能しません。
パイプのセマンティクスについての私の限られた理解は、selectがブロックされるようにパイプのEOF状態をクリアする必要があると思います。しかし、これを行う方法がわかりません。
私はあなたの集合的な知恵に身を投じます:)マーク。
python - ノンブロッキングとして開かれたパイプの Python readline
ノンブロッキング モードで開かれた Linux fifo があります。予想どおり、ファイル オブジェクトで read を呼び出すと、すぐに戻ります。select を使用して、ビジー待機がないことを確認しますが、使用可能なデータがある場合でもプログラムに通知されるようにします。好奇心から readline 関数を試してみたところ、改行文字が見つかるまで readline がブロックされることに驚きました。top を介してプロセッサの使用状況を調べたところ、readline がビジー状態で待機していないようです。私のアプリケーションはパフォーマンスに敏感なので、ノンブロッキング ソケットで readline を使用するとパフォーマンスに影響があるかどうか疑問に思っています。