2015-11-17 3 views
1

Я использую + (BOOL)setThreadPriority:(double)p; для изменения приоритета NSThread, но threadPriority всегда равен 0,5. Возвращаемое значение setThreadPriority: - TURE.NSThread setThreadPriority: не работает

_thread = [[NSThread alloc] initWithTarget:self selector:@selector(runThread) object:nil]; 

-(void)runThread { 
    @autoreleasepool { 
     [[NSThread currentThread] setName:@"3DF7EF974A80"]; 
     NSRunLoop *runLoop = [NSRunLoop currentRunLoop]; 
     [runLoop addPort:[NSMachPort port] forMode:NSDefaultRunLoopMode]; 
     [_condition lock]; 
     [_condition signal]; 
     [_condition unlock]; 
     [NSThread setThreadPriority:1.0]; 
     CFRunLoopRun(); 

     [runLoop removePort:[NSMachPort port] forMode:NSDefaultRunLoopMode]; 
     [_condition lock]; 
     [_condition signal]; 
     [_condition unlock]; 
    } 
} 

Я использую Xcode 7.0.1 и OS X 10.10.5.

+0

Когда вы это вызвали, вернули ли они TRUE или FALSE? Вы назвали это в потоке, который вы создали вручную? – Rob

+0

возвращается TRUE. Я создаю поток вручную. Я добавил код. –

+0

Вы пытались установить приоритет потока после выполнения оператора запуска цикла? – Astoria

ответ

0

Я не могу воспроизвести поведение, которое вы описали. Когда я делаю следующее на любой прошивке или Mac OS X, он правильно устанавливает приоритет потока:

@interface ViewController() 
{ 
    NSThread *_thread; 
    NSCondition *_condition; 
} 
@end 

@implementation ViewController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    _condition = [[NSCondition alloc] init]; 
    _thread = [[NSThread alloc] initWithTarget:self selector:@selector(runThread) object:nil]; 
    [_thread start]; 
    [self performSelector:@selector(checkThreadStatus) onThread:_thread withObject:nil waitUntilDone:false]; 
} 

- (void)checkThreadStatus { 
    NSLog(@"%.2f", [[NSThread currentThread] threadPriority]); 
} 

- (void)runThread { 
    @autoreleasepool { 
     [[NSThread currentThread] setName:@"3DF7EF974A80"]; 
     NSRunLoop *runLoop = [NSRunLoop currentRunLoop]; 
     [runLoop addPort:[NSMachPort port] forMode:NSDefaultRunLoopMode]; 
     [_condition lock]; 
     [_condition signal]; 
     [_condition unlock]; 
     [NSThread setThreadPriority:1.0]; 
     CFRunLoopRun(); 

     [runLoop removePort:[NSMachPort port] forMode:NSDefaultRunLoopMode]; 
     [_condition lock]; 
     [_condition signal]; 
     [_condition unlock]; 
    } 
} 

@end 

Нам нужен minimal, yet reproducible, example of the problem для того, чтобы помочь вам диагностировать это дальше.

0

SetThreadPriority не работает на тренажере, пожалуйста, проверьте это на устройстве

+0

Этот вопрос предназначен для OS X. –