为什么这个while循环导致100%的cpu

时间:2011-10-26 14:30:42

标签: iphone ios

我有一个奇怪的情况,一个while循环导致我的CPU使用率达到90%到100%之间。 cpu保持这么高。 如果我注释掉while循环,则cpu保持正常。

这里出了什么问题?

我已经输入了一个断点,而while循环肯定会退出。

[self performSelectorInBackground:@selector(checkstate:) withObject:padid];



-(void)checkstate:(PadIDSIdentifier*)pids
    {

        int pid=0;
        int cid=0;
        pid=pids.padid;
        cid=pids.channelid;


        NSAutoreleasePool *pool=[[NSAutoreleasePool alloc]init];


        while (change==NO) 
        {

         // wait for the condition I want
         change=YES;




        }



        [pool release];

    }

3 个答案:

答案 0 :(得分:6)

你正在吃掉那个循环中的CPU。您需要做的是让操作系统等待您(将等待进程设置为低优先级,以便在空闲时间进行)。

你在Windows中如何做到这一点是WaitForSingleObject。你如何在iPhone上使用NSCondition。

这是链接:How do I use NSConditionLock? Or NSCondition

基本上,NSCondition由另一个线程发出信号,允许你的线程继续处理。

答案 1 :(得分:2)

您的CPU卡在循环中。它基本上是在100%的时间内绕圈子等待变量改变为其他东西。

答案 2 :(得分:1)

您所显示的代码看起来并不准确反映您正在运行的代码。

只要您的程序处于控制状态,它就会使用100%的CPU。使用less的唯一方法是返回操作系统。当你运行一个紧凑的循环时,它将不会返回到操作系统,因此只要它运行就会使用100%的CPU。