2011-09-12 18 views
0

私はスレッドを繰り返し呼び出す必要があるアプリケーションで作業しています。そのスレッドでは、XMLを解析する必要があり、そのXMLから更新されたデータを取得する必要があります。そのスレッドを繰り返し呼び出す方法を私に教えてください。私のスレッドが動作していて、コードがもう一度呼び出すと、クラッシュしてしまうと思います。NSThreadを繰り返し呼び出す方法は?

+1

あなたは何をしようとしているのか簡単に説明できますか?あなたはスレッドを完全に呼び出すべきではなく、代わりにGCDが共有データ上でasyncの呼び出しを繰り返し呼び出すようなものを使用することは可能でしょうか? – bryanmac

+0

Infect私はxmlからデータを取得してスコアを更新する必要があります。更新されたスコアを取得するために私は画面refredhする必要があります – Mashhadi

答えて

1

別のスレッドを起動するための新しい方法

-(void) thisMethodWillRunAsASeparateThread 
{ 
    //Threads need their own pool. 
    NSAutoreleasePool *pool = [NSAutoreleasePool new]; 
    while (thisThreadShouldRun) 
    { 
     // run xml parsing code 
    } 
    [pool release]; 
} 

にコードと:

[NSThread detachNewThreadSelector:@selector(thisMethodWillRunAsASeparateThread) toTarget:self withObject:nil]; 
+0

私は2つのスレッドを実行する必要があるという意味ですか?それはクラッシュの原因にはなりませんか? – Mashhadi

+0

アプリがクラッシュすることなく2つのスレッドを実行できます。必要に応じて相互排除を適切に適用しないと、アプリがクラッシュする可能性があります。 –

+0

@Mashhadi:私は、ライブデータ(ここでは更新されたスコアの場合)を取り出すWebサービスへの呼び出しは、スレッドでなければならないと考える。気象接続がアクティブであるかどうかを確認するか、またはサービスが – Mahesh

0

あなたのようなNSTimer必要があります繰り返し任意のコードを呼び出すために:

NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:0.10f target:self 

selector:@selector(methodName) userInfo:nil repeats:YES]; 

あなたがすべき使用後にタイマーを無効にします。あなたがバックグラウンドスレッドを使用してコードを実行するのをやめようとするなら、このコードは必要ですが、これは複数回繰り返されません。

[NSThread detachNewThreadSelector:@selector(methodName:) toTarget:self withObject:objName,nil]]; 
+0

に次回呼び出された場合には、スレッドが既に処理中のときにこのスレッドが呼び出されるかどうかを確認するだけです。 – Mashhadi

+0

バックグラウンドスレッドを使用する必要があります http://evilrockhopper.com/2010/01/iphone-development-keeping-the-ui-responsive-and-a-background-thread-pattern/ – kulss

関連する問題