почему CFRunLoopRun не работает? - PullRequest
1 голос
/ 12 января 2012
[self request]; //main thread

- (void)request {
    [self performSelectorInBackground:@selector(regFun) withObject:nil];
}

- (void)regFun {
    CFRunLoopRun();
    CCLOG(@"CFRunLoopRun not work");
}

Учитывая предыдущий код, знаете ли вы, почему CFRunLoopRun() не работает ?. Мне нужно позвонить regFun в фоновом режиме.

Есть ли другие способы остановить фоновый поток?

Ответы [ 3 ]

1 голос
/ 13 января 2012

Может работать.

[self request]; //main thread

- (void)request {
    //[self performSelectorInBackground:@selector(regFun) withObject:nil];
    [NSTimer scheduledTimerWithTimeInterval:0 target:self selector:@selector(regFun) userInfo:nil repeats:NO];
}

- (void)regFun {
    CFRunLoopRun();
    CCLOG(@"CFRunLoopRun not work");
}

Но я не уверен, что это правильный подход, и я не знаю, что случилось. (

1 голос
/ 14 января 2012

ОК, поскольку вы не говорите нам, что вам действительно нужно делать, давайте догадаемся. Если вы просто хотите запустить селектор в фоновом режиме, попробуйте Grand Central Dispatch:

- (void) request {
    dispatch_async(dispatch_get_global_queue(0, 0), ^{
        [self regFun];
    });
}

- (void) regFun {
    // Running in background, with a run loop available
    // and an autorelease pool, too. After the code finishes:
    dispatch_async(dispatch_get_main_queue(), ^{
        // Will be called on the main thread.
        [self reportBackgroundTaskFinished];
    });
}
0 голосов
/ 12 января 2012

regFun находится в фоновом потоке, поэтому вызов CFRunLoopRun() создает и запускает цикл выполнения в этом потоке. Только к циклу выполнения ничего не привязано, поэтому он сразу выходит.

...