我有一个奇怪的情况,一个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];
}
答案 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。