Как положить только одну нить спать? - PullRequest
0 голосов
/ 29 января 2009

Я хочу создать две темы в моей игре. Один поток предназначен для таймера, а другой - для сенсорных событий. Потому что, когда я запускаю игру на 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 ]

1 голос
/ 29 января 2009

Если вы пытаетесь создать таймер, вам, вероятно, следует просто использовать NSTimer, потому что это проще и эффективнее, чем создание потока просто для отправки события go каждый раз.

edit: как есть, вы не создаете секунду, а просто останавливаете основной поток, вызывая [NSThread sleepForTimeInterval: 0.01] в цикле. Это означает, что ваш основной поток больше не выполняет цикл обработки событий, что может привести к тому, что все виды вещей не будут работать.

0 голосов
/ 14 октября 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...