如何同时运行两个循环?

时间:2012-07-05 20:57:40

标签: objective-c xcode multithreading scanf

我一直在使用Objective C和Xcode开发一个非常简单的文本游戏。它差不多完成但是我遇到了问题, scanf 方法停止循环并要求用户输入,而我需要计算机运行其余的循环,我提出的解决方案是同时运行两个while循环,一个是逻辑循环,另一个是用户输入的循环。

我一直在做我的研究,看起来使用线程是要走的路,我只是没有找到一个教程,它会在Objective C中为n00b分解它(我在java中很体面,我从来没有与线程一起工作)。如果有人可以解释它们或将我链接到一个非常简单的教程,那将是很棒的。或者,如果有人有另一个想法,我会对其他任何事情持开放态度。

必要的代码(我遇到问题的scanf上有星号):

 while(running != 0)
    {
        if(gameState == 1)
        {
            if(timeToGenerateNum == true)
            {
                while(randNumber < 10000000)
                {
                    randNumber = arc4random() % 100000000;
                }
                NSLog(@"%i", randNumber);
                timeToGenerateNum = false;
            }
            else 
            {
                while(time <= 2500)
                {
                    NSLog(@"Testing");
                    time++;
  ******************scanf("%i", &userNum);************************
                    if(userNum == randNumber)
                    {
                        score += time;
                        time = 0;
                        timeToGenerateNum = true;
                    }
                }
                NSLog(@"Game Over! Your score was %i!", score);
                running = 0;
            }
        }
        else if(gameState == 2)
        {
            NSLog(@"To play, simply type in the number that appears on the screen.");
            NSLog(@"But be careful, you only have a short amount of time before GAME OVER!");
            NSLog(@"The quicker you type in the number the more score you get!");
            NSLog(@"Are you ready to start, if so type '1' and press enter!");
            scanf("%i", &gameState);
        }
    }

1 个答案:

答案 0 :(得分:0)

你将需要学习一些关于BSD(Unix,Linux)输入/输出的信息来解决这个问题:用你编写的非阻塞函数替换你对scanf的调用,以从用户的键盘获取输入。 / p>

此函数应立即返回用户键入的内容,如果没有输入任何内容,则立即返回零字符数。

读取select(2)系统调用,并记住键盘输入(标准输入)是第一个文件描述符,文件描述符为零。

相关问题