English 中文(简体)
NSTread 中退出
原标题:exit in NSThread

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

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

PlayScene 是一种继承阶级

@interface PlayScene : StartScene {
}

所以当我叫PlayScene 观景时,我叫

- (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];
//    }
}

所以游戏暂停了。 当我按下重新启动按钮时

-(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];
}

被调用 。 问题之一是有 [gameMechThread 取消] , 但是

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.

最佳回答

在NSTread 中使用 return

if (gameMechThread.isCancelled) {
       return;
}
问题回答

暂无回答




相关问题
List Contents of Directory in a UITableView

I am trying to list the contents of Ringtones directory in a TableView, however, I am only getting the last file in the directory in ALL cells, instead of file per cell. This is my code: - (...

iPhone NSUserDefaults persistance difficulty

In my app i have a bunch of data i store in the NSUserdefaults. This information consists of an NSObject (Object1) with NSStrings and NSNumbers and also 2 instances of yet another object (Object2). ...

Writing a masked image to disk as a PNG file

Basically I m downloading images off of a webserver and then caching them to the disk, but before I do so I want to mask them. I m using the masking code everyone seems to point at which can be found ...

Resize UIImage with aspect ratio?

I m using this code to resize an image on the iPhone: CGRect screenRect = CGRectMake(0, 0, 320.0, 480.0); UIGraphicsBeginImageContext(screenRect.size); [value drawInRect:screenRect blendMode:...

Allowing interaction with a UIView under another UIView

Is there a simple way of allowing interaction with a button in a UIView that lies under another UIView - where there are no actual objects from the top UIView on top of the button? For instance, ...

热门标签