問題タブ [blocking]

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 投票する
12 に答える
145908 参照

python - Pythonでキーボードをポーリングする(キープレスを検出する)

コンソールのpythonアプリからキーボードをポーリングするにはどうすればよいですか? 具体的には、他の多くの I/O アクティビティ (ソケットの選択、シリアル ポート アクセスなど) の最中に、これに似たようなことをしたいと考えています。

Windowsでこれを行う正しいpythonicの方法は何ですか? また、必須ではありませんが、Linux への移植性も悪くありません。

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

perl - 完全な行がある場合にのみ、IO::Socket::INET ファイルハンドルから読み取るにはどうすればよいですか?

IO::Socket::INETファイルハンドルから読み取るとき、ストリーム上に利用可能なデータが常にあるとは限りません。ストリームを覗いてデータが利用可能かどうかを確認したり、読み取りを行うときに有効な行終端なしでデータを取得せず、すぐに読み取りを通過したりするには、どのような手法が利用できますか?

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

python - 他の誰かが変更したオブジェクトを上書きしないようにする方法

チェックアウト後にオブジェクトが保存された場合、オブジェクトを保存しないようにする一般的な方法を見つけたいと思います。

timestampオブジェクトには、最終変更時刻を含むフィールドがあると想定できます。でチェックアウト (たとえば、ModelForm を使用してビューにアクセス) しt1、オブジェクトが で再度保存されたt2場合、t2>t1保存できないはずです。

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

c# - c#1つのフォームがwinformプロジェクトで別のフォームをブロックしている

次の構成で使用されているメインフォームとスプラッシュフォームの2つのフォームを使用するアプリケーションがあります。

注意:メインフォームは次のコードで作成されます。

上記の問題は、スプラッシュを閉じない限り、スプラッシュの構成が発生しないことです。

これが発生した場合にのみ、MainFormコンストラクターの残りの部分が実行されます。このブロッキング動作を簡単に停止するにはどうすればよいですか?

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

sql-server - SQL Server 2000は、読み取っているテーブルをブロックせずにフルテキストカタログにデータを入力するようにできますか?

SQL Server 2000にデータベースサーバーがあり(そうです...)、一部のテーブルにフルテキストカタログがあります。私は現在、静かな時間に一晩中全人口を処理しています。新しいデータを検索で検討できるように、日中にカタログを更新できるようにしたいと考えています。

私が気付いた問題は、増分ポピュレーションが実行されると、ポピュレーションプロセスによって引き起こされるかなりの量のブロッキングが発生することです。このデータベースの他のトランザクションは、遅延を最小限に抑えるために「コミットされていない読み取り」またはダーティ読み取りを使用しているため(2番目までの正確なデータは特に気にしません)、なぜ人口がそれ自体はデータを読み取るだけで、それらをブロックします。

手がかり、ヒントはありますか?

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

c - 名前付きパイプ (mkfifo) でノンブロッキング fopen を実行するにはどうすればよいですか?

mkfifo を使用して名前付きパイプを作成して開こうとするプログラムがある場合、パイプをブロックせずに読み取りまたは書き込み用に開くにはどうすればよいですか?

具体的には、GUI の有無にかかわらず実行できる C プログラムを作成しています (Java で作成)。

C プログラムでは、mkfifo を使用して名前付きパイプを正常に作成しましたが、

fopen は、GUI がそのパイプを書き込み用に開くまで戻りません。私がやりたいことは、(GUI がそれに書き込むことを決定した場合) そのパイプを一度読み取れるようにすることです。ファイル記述子を select() 呼び出しに入れます。Java GUI が実際に開始されることは決してないと予想するのは合理的であるため、特定の時点で、またはまったくパイプのもう一方の端を開くために Java GUI に依存することはできません。

また、書き込み用に 2 つ目のパイプを開きますが、同じ問題が発生すると思います。さらに、リーダーのない出力パイプに O_NONBLOCK を設定することはできません。

助言がありますか?

(これはLinuxシステムで実行されています)

0 投票する
7 に答える
100490 参照

java - Java InputStream ブロッキング読み取り

Java api によると、次のInputStream.read()ように記述されています。

ストリームの終わりに達したために使用できるバイトがない場合は、値 -1 が返されます。このメソッドは、入力データが利用可能になるか、ストリームの終わりが検出されるか、例外がスローされるまでブロックされます。

読み取りを行うwhile(true)ループがあり、ストリームを介して何も送信されていない場合は常に -1 になります。それは予想されます。

私の質問は、 read() がブロックされるのはいつですか? データを取得しない場合は -1 を返します。データが受信されるまでブロッキング読み取りが待機することを期待します。入力ストリームの最後に到達した場合、read() は -1 を返すのではなく、単にデータを待つべきではありませんか?

または、ストリームにアクセスする別のスレッドがあり、read() がストリームにアクセスできない場合にのみ read() がブロックされますか?


それが私の次の質問につながります。以前は、データが利用可能になったときに通知するイベント リスナー (ライブラリによって提供される) を使用していました。通知を受けたときwhile((aByte = read()) > -1)、ストアをバイトと呼びました。非常に近い時間に 2 つのイベントを取得し、すべてのデータが表示されていないことに戸惑いました。2 番目のイベントのデータの末尾のみが表示され、残りが欠落しているように見えました。

最終的にコードを変更して、呼び出したイベントが発生したときにif(inputStream.available() > 0) while((aByte = read()) > -1)バイトを格納するようにしました。今では正常に機能し、すべてのデータが表示されました。

誰かがこの動作を説明できますか? はInputStream.available()、(ストリームの) 次の呼び出し元をブロックする前に読み取ることができるバイト数を返すと言われています。.available() を使用しない場合でも、最初のイベントの読み取りが 2 番目のイベントの読み取りをブロックするだけで、大量のストリーム データを消去したり消費したりしないと予想されます。これを行うと、すべてのデータが表示されないのはなぜですか?

0 投票する
3 に答える
722 参照

c++ - ブロックを回避する方法 (C++、Win32)

アプリケーションの要求に応答する必要がある dll を作成しています。アプリケーションの要件の 1 つは、呼び出しの完了に時間がかからないようにすることです。

たとえば、ホスト アプリケーションによって呼び出される関数 foo() があるとします。

たとえば、foo は、確実に長い時間がかかるタスクを実行する (または関数を呼び出す) 必要があります。アプリケーションでは、待機変数を設定できます。foo が戻ったときにこの変数が 0 でない場合、wait が 0 を返すまで (各呼び出しの前に wait 変数をリセットして) 何度も foo を呼び出します。

これに対する最善のアプローチは何ですか?

行きますか:

これは、LengyRoutine が完了するまでに長い時間がかかるという問題を実際には解決しません。タスクが完了したかどうかに応じて inRoutine を更新するスレッドを生成する必要がありますか?

ありがとう..

0 投票する
6 に答える
42037 参照

c++ - 基本的なイベントループをどのように実装しますか?

GUI ツールキットを使用したことがある場合は、すべてが完了した後に実行する必要があるイベント ループ/メイン ループがあり、アプリケーションを存続させ、さまざまなイベントに応答できることを知っています。たとえば、Qt の場合、main() で次のようにします。

この場合、 app.exec() はアプリケーションのメインループです。

この種のループを実装する明白な方法は次のとおりです。

しかし、これは CPU を 100% に制限するため、実際には役に立ちません。では、CPU を完全に消費することなく、応答性の高いイベント ループを実装するにはどうすればよいでしょうか?

回答は、Python および/または C++ で高く評価されます。ありがとう。

脚注: 学習のために、独自のシグナル/スロットを実装し、それらを使用してカスタム イベントを生成します (例: go_forward_event(steps))。しかし、システム イベントを手動で使用する方法を知っている場合は、それについても知りたいです。