2011-01-23 4 views
0

私のアプリケーションには2番目に実行中のスレッドがあります。iphone sdkはスレッド間で通信します

  • が発見されたメインアプリケーションスレッド
  • コール結果を通知するために第2のスレッドからメインスレッド上の関数から優雅に別のスレッドを停止し、メインに渡す:私は、次の達成するために必要1。

最初のタスクでは、2つのスレッド間でグローバル変数を共有していますか? 2番目のタスクを達成する方法がわかりません。

を(NSNotificationCenterは...オブジェクトを渡すことはできません)私はこのような第二のスレッドに[NSThread detachNewThreadSelector:@selector(backGroudTask) toTarget:self withObject:nil];

おかげ

答えて

1

私はまだこれに最善の答えを探していますが、ここで私は何ですか?

NSLockを使用して、両方のスレッドで同じ変数にアクセスできないようにするロックを作成します。次に、BOOLを使用して、メインスレッドが停止を開始するかどうかを確認します。メインスレッドで

次を使用し、あなたの質問の後半部分については、この

endMe = NO; 

while(!endMe) 
{ 
    // do your task stuff 

    [myLock lock]; 
    endMe = exitFlag; 
    [myLock unlock]; 
}

を行い、他のスレッドでこの


[myLock lock]; 
exitFlag = YES; 
[myLock unlock]; 

の操作を行います。

[self performSelectorOnMainThread:@selector(your_selector_name) withObject:nil waitUntilDone:false];

これが原因となりますメインスレッドで実行するセレクタルーチン。

希望すると便利です。

1

をlunchingよ(NSNotificationCenterは、オブジェクトを渡すことはできません... )

それはありませんが、あなたは、通知のuserinfoをにそれらを追加する必要が

NSDictionary *userInfo = [NSDictionary dictionaryWithObject:myObject forKey:@"object"]; 
[[NSNotificationCenter defaultCenter] postNotificationName:@"myNotification" object:self userInfo:userInfo]; 

- (void)foo:(NSNotification *)notification { 
    id object = [[notification userInfo] objectForKey:@"object"]; 
} 
関連する問題