2011-02-03 3 views
2

まず、私は非常に新しいObjective C/Cocoa iOS開発者ですが、前にC/C++アプリケーションを作成しました。Objective C(Cocoa)スレッド(iOS用)でCコードを実行

私はiPhoneアプリの中でRabbitmq-c(http://hg.rabbitmq.com/rabbitmq-c/)クライアントを動かすことができました。私は自分のアプリから直接Rabbitmqに接続し、キューを消費することもできます項目。だからすべてが良いです。

私の問題は、私のiPhoneアプリがrabbitmq-cライブラリを使ってサーバーからの着信メッセージをポーリングする必要があることです。おそらく、ほぼ無限のwhileループが存在するでしょう。

私はこれを新しいスレッドに入れなければなりませんか?理想的には、rabbitmq-cクラスをAsync objective Cクラスとしてラップし、NSNotification(または同様のもの)を使用してUIに通知したいと考えています。 Runloopなどのようなものについては、余分なスレッドを使わずに多くの問題を解決することができるので、新しいスレッドを作成するのはちょっと心配です。

これについて私には最良の方法はありますか?コードや指示の例が参考になります。私はObjective Cコード/ Coca rabbitmqライブラリを扱っていないことを覚えておいてください。私は自分のiPhoneアプリケーションの中でCコードを使用しています。

Subrat

答えて

3

おかげで、サーバーのポーリングでメインスレッドをブロックしません。

操作が終了しないため、独自のスレッドを作成し、このサーバーポーリングのループを実行します。あなたは潜在的に無限の代わりに実行ループを使用することができます(各スレッドには1つあります)。代わりに定期的にスレッドを生成する必要があります。このために1つのスレッドを使用するのが最も簡単です。

更新があると、メインスレッドから通知(NSNotificationを選択した場合)を通知します.UIKitはメインスレッドからのみ動作するようになっています。

サンプルでは、​​NSRunLoopとCFRunLoopに関連するサンプルから始めます。

幸運

0

また、UI、またはのUIKitに関連するものを更新するためのカスタムデリゲートを作成することができます。

通知の方が少し簡単になり、複数のオブジェクトが1つの通知を監視できるという利点があります。デリゲートでは、デリゲートするオブジェクトを変更しなければそのようなことはできません(それは珍しいことです)。委任の

いくつかの利点:

オブジェクトを委譲し、デリゲートは、デリゲートの実装は必須である場合は特に、明確になされているとの間の接続。 複数の種類のメッセージをdelegateeからdelegateに渡す必要がある場合は、メッセージごとに1つのdelegateメソッドを指定することで、委任によってより明確になります。

0

他の方法は、メッセージを受信する方法を書くことです。このメソッドは無限ループを持つことができます。

後で、この方法をこのようなバックグラウンドスレッドに入れることができます。

[self performSelectorInBackground:@セレクタ(receiveMessages)withObject:nil];

関連する問題