DKWechatHelper/dkhelper/dkhelperDylib/QGVAPlayer/class/Controllers/QGAnimatedImageDecodeThreadPool.m
DKJone 888af8954e [v1.0.7](https://github.com/DKWechatHelper/DKWechatHelper/releases/tag/1.0.7) / 2021-01-29
what's new
* 动态启动图
* 动态聊天背景
* 支持8.0.1
* 更新越狱包8.0.1
* 更新已注入助手的8.0.1未签名包
* 更新越狱源安装包
2021-01-29 16:35:34 +08:00

78 lines
2.1 KiB
Objective-C

// QGAnimatedImageDecodeThreadPool.m
// Tencent is pleased to support the open source community by making vap available.
//
// Copyright (C) 2020 THL A29 Limited, a Tencent company. All rights reserved.
//
// Licensed under the MIT License (the "License"); you may not use this file except in
// compliance with the License. You may obtain a copy of the License at
//
// http://opensource.org/licenses/MIT
//
// Unless required by applicable law or agreed to in writing, software distributed under the License is
// distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
// either express or implied. See the License for the specific language governing permissions and
// limitations under the License.
#import "QGAnimatedImageDecodeThreadPool.h"
#import "QGAnimatedImageDecodeThread.h"
#import "QGVAPSafeMutableArray.h"
@interface QGAnimatedImageDecodeThreadPool (){
NSMutableArray *_threads;
}
@end
@implementation QGAnimatedImageDecodeThreadPool
+ (instancetype)sharedPool {
static QGAnimatedImageDecodeThreadPool *instance;
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
instance = [[QGAnimatedImageDecodeThreadPool alloc] init];
});
return instance;
}
- (instancetype)init {
if (self = [super init]) {
_threads = [QGVAPSafeMutableArray new];
}
return self;
}
/**
从池子中找出没被占用的线程,如果没有则新建一个
@return 解码线程
*/
- (QGAnimatedImageDecodeThread *)getDecodeThread {
QGAnimatedImageDecodeThread *freeThread = nil;
for (QGAnimatedImageDecodeThread *thread in _threads) {
if (!thread.occupied) {
freeThread = thread;
}
}
if (!freeThread) {
freeThread = [[QGAnimatedImageDecodeThread alloc] initWithTarget:self selector:@selector(run) object:nil];
[freeThread start];
[_threads addObject:freeThread];
}
return freeThread;
}
- (void)run{
//线程保活
@autoreleasepool {
[[NSRunLoop currentRunLoop] addPort:[NSPort port] forMode:NSDefaultRunLoopMode];
NSRunLoop *runLoop = [NSRunLoop currentRunLoop];
[runLoop run];
}
}
@end