メインの開始スレッドでは、コードを一時停止して新しいスレッドを開始し、ユーザーの入力が得られるまで待機する必要があります。次に、作成された新しいスレッドを破棄して、メイン スレッドが中断したところに戻りたいと思います。しかし、何が起こっているかというと、新しいスレッドが呼び出されますが、メイン スレッドはコードを処理し続けます。ユーザーがインターフェイス ボタンを使用するのを妨げずに、これを処理するにはどうすればよいですか? if(moveCount == 2) ステートメントで別の nscondition を作成する必要があるのではないでしょうか? または、メイン スレッドが、ユーザー入力を通知する他のスレッドからのシグナルを受信するまで待機する必要があること。
追加の注意: また、インターフェイスで 2 つの UIButton を引き続き使用できるように、元のスレッドを一時停止したいと思います。
IM に寄せられた質問に関するその他の注意事項: これは私が作成しているゲームです。コードのどこかで、私のメソッドの 1 つのメイン スレッドを意味します。このメソッドは、移動している方向を決定し、タグ差を取得してから攻撃を行います。ただし、2 つの攻撃が行われる場合があるため、この時点で、ユーザーは画面上で 2 つのボタンをクリックして、どちらの攻撃を行うかを決定できます。
また、メインスレッドを今すぐ一時停止するべきではないことも静かに明らかです。もしそうなら、代替手段は何ですか?ありがとう
NSCondition と NSThread
@property (strong, nonatomic) NSCondition *condition;
@property (strong, nonatomic) NSThread *aThread;
私のviewDidLoadで以下を作成します。
// create the NSCondition instance
self.condition = [[NSCondition alloc]init];
// create the thread
self.aThread = [[NSThread alloc] initWithTarget:self selector:@selector(threadLoop) object:nil];
どこか中間コード..
if(moveCount == 2){
[self.aThread start];
}
// I need to get captureDecision from user from 2 buttons before continue.. How do I pause this thread when aThread is started. Then when capture decision is received discard aThread and start here.
NSLog(@"Capture Decision = %d", captureDecision);
if(captureDecision == 1){
tagDifference = newButton.tag - currentButton.tag;
}else{
tagDifference = currentButton.tag - newButton.tag;
}
}
aThread メソッド
-(void)threadLoop{
NSLog(@"Thread Loop Triggered");
while([[NSThread currentThread] isCancelled] == NO)
{
[self.condition lock];
while(captureDecision == 0)
{
[self.condition wait];
}
[self.condition unlock];
}
[NSThread exit]; //exit this thread when user input is received
}