ココア分散オブジェクト、ロングポーリング、launchdのとアクティビティモニタに「応答なし」
-
20-08-2019 - |
質問
シナリオます:
私は、Macのアプリケーションと(財団クラスで書かれた)はlaunchdデーモンとの間で分散型のオブジェクトベースのIPCを持っています。私は(私がregisterClient持っている例:サーバーのルートオブジェクト上を、サーバのルートオブジェクトが通知するイベントがありますたび/クライアントのプロキシオブジェクトのメソッドを呼び出して)非同期メッセージングに関する前に問題を持っていたので、私はことを意味ロングポーリングを行いましたデーモンからのイベント/通知のクライアント「収穫」のリスト。この「収穫」は、その後にNSArrayインスタンスを返すサーバオブジェクトメソッドの呼び出しを介して行われます。
数秒間、(launchdのスルー発売)サーバーオブジェクトのプロセスは、(アクティビティモニタ内部の)横に「(応答なし)」タグの付いた赤いラベル付けされて開始されるまで、これは、かなりうまく動作します。私が言ったように、機能的に、それがうまく動作しますが、私たちは、この「応答なし」のラベルを取り除きたいです。
をどのように私はこのタグを "応答なし"?のこの防ぐことができます
FYI、私はすでに前のlaunchdベースのプロセスを行なったし、これは私がやった初めてロングポーリングです。また、私はNSSocketPortNameServerベースの接続ともNSSocketPortベースのものを試してみました。彼らはこの問題を持っていませんでした。ロックが使用されるロックだって」も、問題ではなかっただけでしたNSConditionのと、私たちは記録され、デバッグプログラムを、唯一のロック 『問題』は、実際に、機能的に働く収穫一部、上にあるようにそれはそう。サーバ・プロセスがにObjCを使用して書かれていながらも、クライアント・プロセスはPyObjCで書かれています。
事前に感謝します。
解決 3
私の問題は、署名を使用してプロセスのPIDを取得するため、実際に通話したFNDR
...その部分が「応答なし」エラーを発生させ、それがロックやロングポーリングの一部であったことはありません。この男については申し訳ありません。しかし、私はすでに答えを見つけた神に感謝します。
他のヒント
ピーターの正しいアプローチで、あなたは簡単な検査でそれを把握することができるかもしれません。あなたは、少なくとも5秒間、自分のイベントキューのイベントを処理していないことを意味します(2秒でしたが、彼らは10.4で、それを持ち上げた)「応答なし」。 UIプロセスの場合、これは回転する待機カーソルを作成しますが、非UIプロセスのために、あなたに簡単に効果を見ていない。
これは、実行ループベースのプログラムがある場合、それはあなたがおそらく実行ループとコールバック(非同期)で行われるべきで、ブロッキング(同期)の操作で何かをやっている意味。別の方法として、あなたはあなたのmainthreadがイベントに応答し続けることができるようにあなたのブロック操作を処理するために、第二のスレッドを必要とします。