問題タブ [signals]
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++ - マルチスレッド:Signal vs BusyWait(Polling)、スレッド間条件変数に関する質問
スレッド間通信について一般的な質問があります。
現在、私はたくさんのC ++スレッド(〜15)を使用しています。
それらはすべて、処理するデータを取得するために互いにBusyWait(Polling)を使用しています。ただし、CPU使用率を低く抑えることは困難であり、良好なパフォーマンスを提供し、コンテキストスイッチを多用しないようにします。
だから私は条件変数とシグナルを見ています。スレッドで.Wait()に入り、.Signal()を呼び出す別のスレッドを待つという一般的な概念を理解していると思います。
質問#1)私の問題は概念的なものかもしれませんが、シグナルを待機しているスレッドが待機中にSUSPENDEDになると、それ自体ではアクションを実行できなくなります。とにかくそれがいくつかのアクションを実行するためにそれ自体で目を覚ますようにすることはありますか?
質問#2)さらに、私のクラスは両方向にデータを渡すために使用されます。ただし、ミドルクラスが別のクラスからのシグナルを待機している場合、そのクラスにシグナルを送信することはできません。そのような:
したがって、クラスBがCからの.Signal()に対して.Wait()をオンにしている場合、Aからの新しいシグナルを処理することはできません。
A && Cの両方が同じ「newData」信号Bを送信して、それをウェイクアップすることは可能ですか?信号をA&&Cと区別することは可能でしょうか。
私はACEフレームワークを使用してC++を使用してこれをコーディングしており、Boostに切り替える可能性があります。しかし、これは十分に一般的であり、どのOSにも答えを適用できると思います(うまくいけば)。
ありがとう
c++ - シグナル システム コールは、クラスの C++ 静的メンバーで使用できますか?
以下は *nix プラットフォーム全体でサポートされていますか?
c++ - スレッドから親プロセスにデータを渡すにはどうすればよいですか?
シングル スレッド ライブラリを使用するメイン プロセスがあり、メイン プロセスのライブラリ関数しか使用できません。ネットワークから受信した情報をキューに入れる親プロセスによって生成されたスレッドがあります。
何かがキューに入っていることをメイン プロセスに伝える必要があります。その後、キューにアクセスしてオブジェクトを処理できます。ライブラリは 1 つのプロセスでしか呼び出せないため、スレッドはこれらのオブジェクトを処理できません。
パイプとシグナルを使用する必要があると思います。また、さまざまなニュースグループから、「自己トリック」パイプを使用する必要があることを読みました。
このシナリオはどのように実装する必要がありますか?
次の投稿のより具体的なケース:
makefile - GNU make でエラーと割り込みをトラップするにはどうすればよいですか?
に組み込まれているのと同様にtrap
、 GNUで実装する方法があるかどうか疑問に思っていますか?make
BASH
ユーザーが を押した場合CTRL-C
、またはそれmake
自体が失敗した場合 (ゼロ以外の終了)、特定のターゲットまたはマクロを呼び出したいと思います。
linux - Linux の /dev/tty デバイスでのユーザー ブレーク (UART ブレーク) の処理
ここにいくつかのコード サンプルがありますが、問題は、'putty' を使用してシリアル ライン上で 'break' が送信されたときに、シグナル ハンドラが呼び出されないことです。
ここに私のstty設定があります:
何が足りないのですか / 信号を受信できないのはなぜですか? USB-2-Serial コンバーターを使用しており、ブレークが送信されていることがわかりますが、このクライアント エンドでは何もトリガーされません。
django - commit=False のときに呼び出される Django pre_save シグナル
管理インターフェイスと同様の方法で、モデルの変更を追跡する Django アプリケーションを作成しています。たとえば、次のようなモデルへの変更のリストを表示できますChanged Status from Open to Closed
。
これを行うために pre_save シグナルを使用し、関連するフィールドをデータベース内の既存のアイテムと保存されている「インスタンス」と比較しています。既存のアイテムを取得するにsender._default_manager.get(pk=sender.pk)
は、少し面倒に思えることをしなければなりませんが、その部分はうまくいきます。
問題は、このモデルを変更するためのビューがsave()
フォームのメソッドを 2 回呼び出すことです (最初は commit=False で)。これは、pre_save シグナルが 2 回発行されるため、2 つの変更がデータベースに記録されることを意味します。
これを達成する方法はありますか?まったく別の方法かもしれませんが、Django 管理アプリはシグナルを使用してユーザーが行った変更を追跡することを読んだことを覚えています。
c - プロセスは、バックグラウンドになったことをどのように認識しますか?
ファイルを scp すると、^Z で停止してバックグラウンドに置くことができます。バックグラウンドにある場合、進行状況の印刷は停止しますが、コピーは続行されます。もう一度フォアグラウンドにすると、印刷が再開されます。それはどのように知っていますか?シットトゥ?それは標準の ptty で起こりますか?
c++ - 印刷してコア ダンプ ファイル スタック、Windows 上の C++ をログに記録しますか?
プロセスがクラッシュした場合、Windows で C++ のコア ダンプ ファイル スタックをログに記録するにはどうすればよいですか? Unix では、いくつかのシグナル ハンドラを使用してそれを行う方法があることは知っていますが、自分で行ったことはありません。Windows でそれを行うにはどうすればよいですか (ACE を使用しないことをお勧めします)。
ありがとう。
c - シグナルが execv() 全体で適切に再有効化されない
開発中の Linux ディストリビューション用のシステム クリティカルなプログラムを作成しています。クラッシュを回避するために、特定の信号を受信したら、それ自体を再起動する必要があります。問題は、再起動後にその信号を再度有効にできないことです。つまり、信号を 2 回受信することはできません。自分自身を execv() した後、新しいプロセスがシグナルをセットアップするために signal() を呼び出すと、SIG_DFL が返されます。毎回。2 回続けて呼び出しても、そもそも設定されていないことを示しています。元のプロセスから引き継がれている奇妙なフラグはありますか?
java - Javaエラー:java.lang.IllegalArgumentException:VMによって既に使用されているシグナル:INT
Red Hat LinuxでのJavaの問題(IBM JVM 1.4.2 64ビットを使用)を調査しています。誰かが以前にこのエラーメッセージを見て、この問題の回避策があるかどうか知っているかどうか疑問に思っていますか?
ソース:
出力:
追加情報:
何かおかしなことに気づきました。失敗する理由は、シェルスクリプト内でプログラムをバックグラウンドプロセスとして実行しているためです。
すなわちsigtest.sh:
コマンドラインからプログラムを実行するか、「&」を削除する(つまり、シェルスクリプト内のフォアグラウンドプロセスにする)場合、問題はありません...なぜそうなるのかわかりません。