如何只让一个线程入睡?

时间:2009-01-29 08:37:10

标签: iphone cocoa-touch multithreading

我想在游戏中创建两个主题。一个线程用于定时器,另一个用于触摸事件。因为当我在iPhone上运行游戏时,不会报告与触摸事件和触摸事件的计时器冲突。它在模拟器中运行顺畅但在iPhone或iPod Touch上变得非常慢。所以我正在为触摸事件和计时器使用单独的线程。

当我使用[NSThread sleepForTimeInterval:0.01]时,它会使所有线程都处于休眠状态。我的意思是触摸事件也停止通过。我想只停止计时器线程。

这是我的代码:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];

    BOOL Done = NO;
    while (!Done)
    {
        NSAutoreleasePool *loopPool = [[NSAutoreleasePool alloc] init];
        [NSThread sleepForTimeInterval:0.01];
        [self performSelectorOnMainThread:@selector(callTapCode) withObject:tapView waitUntilDone:YES];

        //performSelectorOnMainThread:@selector(callTapCode) withObject:nil waitUntilDone:YES];

        [loopPool release];
        Done=YES;
    }

    [pool drain];
}

2 个答案:

答案 0 :(得分:1)

如果您正在尝试创建一个计时器,您应该只使用NSTimer,因为这比创建一个线程更简单,更有效,只是为了经常发送“go”事件。

编辑:因为你没有创建第二个,你只是通过在循环中调用[NSThread sleepForTimeInterval:0.01]来停止主线程。这意味着你的主线程不再运行事件循环,这可能导致各种事情不再起作用。

答案 1 :(得分:0)

[[NSRunLoop currentRunLoop] runUntilDate:[NSDate dateWithTimeIntervalSinceNow:0.01]];