我在一个特定的线程(非主线程)中每10毫秒调用一次heartBeats
方法,如何在这个相同的线程中随时调用另一个方法?
我像这样子类化了NSThread
@implementation MyThread
{
NSTimeInterval _lastTimeInterval;
}
- (void)main
{
while (true) {
NSTimeInterval timeInterval = [[NSDate date] timeIntervalSince1970]*1000;
if (timeInterval - _lastTimeInterval > 10)
{
[self heartBeats];
_lastTimeInterval = timeInterval;
}
}
}
- (void)heartBeats
{
NSLog(@"heart beats thread: %@", [NSThread currentThread].description);
}
@end
并像这样运行它
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
NSLog(@"main thread: %@", [NSThread currentThread].description);
MyThread *myThread = [[MyThread alloc]init];
[myThread start];
}
- (void)someMethod
{
// do somthing
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
}
@end
现在的问题是如何在
myThread
中运行 - (void)someMethod
方法?
heartBeats
是一个我必须这样调用的API,以保持这个长连接。:( - Greyif
代码替换为[NSThread sleepForTimeInterval:0.007];
可将CPU消耗从98%降至2%,并导致间隔在7.6毫秒至9.8毫秒之间。使用[NSThread sleepForTimeInterval:0.0002];
与您的if代码给出了更接近10.3毫秒的间隔,并使用了9%的CPU,但简短的答案是您将不得不使用某种同步和共享内存数据结构来使您的循环确定它应该执行一些其他方法。您不能像使用GCD队列那样简单地在线程上调度方法。 - Paulw11