Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

iOS16.0 线程警告提示 #650

Open
wangjie172767 opened this issue Sep 27, 2022 · 3 comments
Open

iOS16.0 线程警告提示 #650

wangjie172767 opened this issue Sep 27, 2022 · 3 comments

Comments

@wangjie172767
Copy link

(NSRunLoop *)runLoop;
{
dispatch_group_wait(_waitGroup, DISPATCH_TIME_FOREVER);
return _runLoop;
}
pod集成,
xcode:14.0,iphone14pro,iOS16.0 ,SocketRocket (0.6.0)
警告提示:
Thread running at QOS_CLASS_USER_INTERACTIVE waiting on a lower QoS thread running at QOS_CLASS_DEFAULT. Investigate ways to avoid priority inversions

@Daemonson
Copy link

The same as #648

@jihengcong
Copy link

Have you solved this problem

@Wxm510846302
Copy link

//
// Copyright 2012 Square Inc.
// Portions Copyright (c) 2016-present, Facebook, Inc.
//
// All rights reserved.
//
// This source code is licensed under the BSD-style license found in the
// LICENSE file in the root directory of this source tree. An additional grant
// of patent rights can be found in the PATENTS file in the same directory.
//

#import "SRRunLoopThread.h"
#import <pthread.h>
@interface SRRunLoopThread ()
//{
// dispatch_group_t _waitGroup;
//}

@Property (nonatomic, strong, readwrite) NSRunLoop *runLoop;
@Property (assign, nonatomic) pthread_mutex_t lock;
@Property (assign, nonatomic) pthread_cond_t cond;
@EnD

@implementation SRRunLoopThread

  • (void)dealloc {
    // 不用需要销毁
    pthread_mutex_destroy(&_lock);
    pthread_cond_destroy(&_cond);
    }

  • (void)__initMutex:(pthread_mutex_t *)mutex {
    // #define PTHREAD_MUTEX_INITIALIZER {_PTHREAD_MUTEX_SIG_init, {0}}
    // self.mutex = PTHREAD_MUTEX_INITIALIZER;

    // 静态初始化方法,所以这里不能用这种方式初始化,用下面👇🏻方法初始化
    // 1.初始化属性
    pthread_mutexattr_t attr;
    pthread_mutexattr_init(&attr);
    /*

    • Mutex type attributes
      */
      // #define PTHREAD_MUTEX_NORMAL 0
      // #define PTHREAD_MUTEX_ERRORCHECK 1
      // #define PTHREAD_MUTEX_RECURSIVE 2
      // #define PTHREAD_MUTEX_DEFAULT PTHREAD_MUTEX_NORMAL

    // pthread_mutexattr_settype(&attr, NULL); 传空,默认 PTHREAD_MUTEX_DEFAULT
    pthread_mutexattr_settype(&attr, PTHREAD_MUTEX_RECURSIVE);

    // 2.初始化锁
    pthread_mutex_init(mutex, &attr);

    // 3.销毁属性
    pthread_mutexattr_destroy(&attr);

    // 初始化条件
    pthread_cond_init(&_cond, NULL);

    pthread_mutex_lock(mutex);
    }

  • (instancetype)sharedThread
    {
    static SRRunLoopThread *thread;
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
    thread = [[SRRunLoopThread alloc] init];
    thread.name = @"com.facebook.SocketRocket.NetworkThread";
    [thread start];
    });
    return thread;
    }
  • (instancetype)init
    {
    self = [super init];
    if (self) {
    // _waitGroup = dispatch_group_create();
    // dispatch_group_enter(_waitGroup);
    [self __initMutex:&_lock];
    }
    return self;
    }

  • (void)main
    {

    @autoreleasepool {
    _runLoop = [NSRunLoop currentRunLoop];
    // dispatch_group_leave(_waitGroup);
    // 激活一个等待该条件的线程
    pthread_cond_signal(&_cond);
    NSLog(@"2222");
    // Add an empty run loop source to prevent runloop from spinning.
    CFRunLoopSourceContext sourceCtx = {
    .version = 0,
    .info = NULL,
    .retain = NULL,
    .release = NULL,
    .copyDescription = NULL,
    .equal = NULL,
    .hash = NULL,
    .schedule = NULL,
    .cancel = NULL,
    .perform = NULL
    };
    CFRunLoopSourceRef source = CFRunLoopSourceCreate(NULL, 0, &sourceCtx);
    CFRunLoopAddSource(CFRunLoopGetCurrent(), source, kCFRunLoopDefaultMode);
    CFRelease(source);

      while ([_runLoop runMode:NSDefaultRunLoopMode beforeDate:[NSDate distantFuture]]) {
          
      }
      assert(NO);
    

    }
    }

  • (NSRunLoop *)runLoop;
    {
    // 等待条件(进入休眠,放开mutex锁;被唤醒后,会再次对mutex加锁)
    pthread_cond_wait(&_cond, &_lock);
    NSLog(@"1111");
    return _runLoop;
    }

@EnD

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

4 participants