0

I'm writing a game. I have StartScene class: In StartScene.h:

@interface StartScene : UIView <UITextFieldDelegate> {
    ...
    PlayScene* tView;
    NSThread* gameMechThread;
}

PlayScene is an inherited class

@interface PlayScene : StartScene {
}

So in when I call PlayScene view, I call

- (void)gameMechThread {
    gameMechThread = [[NSThread alloc]initWithTarget:self selector:@selector(gameMech) object:nil];
    [gameMechThread start];
 }

gameMech is a method, where all the main game stuff is executed. I have a pause button and all buttons of that menu in StartScene class. The problem for now is with the restart button. So when I call pause method (that is in StartScene class) by hitting pause button,

tView.GameState=GamePaused;

this is executed in pause method. The state of the game is changed. In PlayScene class I got pause method that is being called all the time

-(void)pause {
    while (self.gameState==GamePaused) {
    }
    if (self.gameState == GameRestarted) {
//        self.threadStop = 2;
        [NSThread exit];
    }
//  if (gameMechThread.isCancelled) {
//       [NSThread exit];
//    }
}

So the game is paused. When I hit the restart button

-(void)restart {
    [gameMechThread cancel];
    [tView.player stop];
    tView.gameState=GameRestarted;
    self.gameState=GameRestarted;
    ...
 //   while (tView.threadStop != 2) { }
 //   tView.threadStop = 1;
    while (gameMechThread.isExecuting) { }

    [tView removeFromSuperview];
    [self startGame];
}

Is called. One problem is that there is [gameMechThread cancel];, but

if (gameMechThread.isCancelled) {
       [NSThread exit];
}

is not working as if it was really canceled, so I commented it for now. threadStop is a property, but in PlayScene class it is changed not on main thread, so that condition doesn't work properly either.

And now the problem with (gameMechThread.isExecuting). That while condition is called before [NSThread exit]; is executed, but the program doesn't stay in while condition until [NSThread exit]; is executed as if that thread is already stopped. Could you please help with deleting the thread, before a new thread in ([self startGame];) is called.

Alexander
  • 233
  • 1
  • 4
  • 14

1 Answers1

0

Use return in NSThread.

if (gameMechThread.isCancelled) {
       return;
}
Parag Bafna
  • 22,812
  • 8
  • 71
  • 144