2009-06-25 15 views
3

シナリオ:ココア分散オブジェクト、ロングポーリング、launchdのとアクティビティモニタに「応答なし」

私はマックのアプリケーションと(財団クラスで書かれた)はlaunchdデーモンとの間で分散型のオブジェクトベースのIPCを持っています。私は非同期メッセージングに関して問題があったので(例えば、私はregisterClientをサーバのルートオブジェクトに持っています。サーバのルートオブジェクトがクライアントのプロキシオブジェクトのメソッドを通知/呼び出しするイベントがあるときはいつでも)、私は長いポーリングを行いました。クライアントは、デーモンからのイベント/通知のリストを "収穫する"。この「収穫」は、サーバーオブジェクトメソッド呼び出しによって行われ、NSArrayインスタンスが返されます。

数秒間、サーバーオブジェクトのプロセス(launchdを介して起動される)が、(Activity Monitor内の)「(応答しない)」タグで赤色にラベル付けされるまで、かなりうまくいきます。私が言ったように、機能的にはうまくいきますが、この「応答しない」ラベルを取り除きたいだけです。

この「応答しない」タグを防止するにはどうすればよいですか?

参考までに、以前はすでにlaunchdベースのプロセスを実行していましたが、これは初めてロングポーリングしたときです。また、NSSocketPortNameベースの接続とNSSocketPortベースの接続も試しました。彼らはこの問題を抱えていませんでした。ロックは問題ではありませんでした。使用されているロックはNSConditionだけでした。私たちはプログラムをロギングしてデバッグしました。実際には機能的に動作するハーベスティング部分にロックの "問題"があるようです。また、クライアントプロセスはPyObjCで記述され、サーバープロセスはObjCを使用して記述されています。

ありがとうございます。

+1

+1これまで最高の誤植!私は "ランチデーモン!"が大好きです! – kent

+0

ハハ。申し訳ありません。とにかく、私はとにかくそれを変更しました。 – jopes

答えて

2

私の問題は、実際には、プロセスのPIDを取得するための呼び出しで、署名「FNDR ...」が原因で、「応答していません」というエラーが発生し、ロックやロング・ポーリングの部分が発生しませんでした。この人には申し訳ありません。しかし、私はすでに答えを見つけた神に感謝します。

2

Sampleそれが何をしているのかを待っているかどうかを知るプロセス。

2

ピーターのアプローチでは正しいですが、簡単な検査で把握することができます。 「応答していません」とは、イベントキューのイベントを少なくとも5秒間処理していないことを意味します(2秒間は使用されましたが、10.4ではそれを上回りました)。 UIプロセスの場合、これは回転待ちカーソルを作成しますが、UI以外のプロセスでは、簡単にエフェクトが表示されません。

これはrunloopベースのプログラムの場合は、実行ループとコールバック(async)で実行する必要があるブロッキング(同期)操作を使用している可能性があります。あるいは、メインスレッドがイベントに引き続き応答できるように、ブロッキング操作を処理するために2番目のスレッドが必要です。

+0

それはそこにいくつかの情報です。私は後で自分のコードをチェックします。どうもありがとう :) – jopes