我正在尝试从谷歌的示例线程程序,我得到一个运行时异常。
是否有任何网站提供了如何使用runloops和线程的示例。 我需要设置两个事件并生成一个线程并并行执行另一个函数。
// Runner.m
#import "Runner.h"
@implementation Runner
- (void)rumMe:(id)ignored {
NSLog(@"Running with threads!!");
}
@end
// Runner.h
@interface Runner : NSObject
-(void)rumMe:(id)ignored;
@end
// Thread1.m
#import <Foundation/Foundation.h>
#import "Runner.h"
int main (int argc, const char * argv[]) {
NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
Runner* runner = [Runner new];
[NSThread detachNewThreadSelector:@selector(runMe:) toTarget:runner withObject:nil];
[pool drain];
return 0;
}
运行时异常:
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '***
-[NSThread initWithTarget:selector:object:]: target does not implement selector (***
-[Runner runMe:])'
答案 0 :(得分:2)
第一部分:你有一个错字
// method declaration
rumMe: with an _m_
// call
runMe: with an _n_
第二部分:你的主要功能是返回并导致程序退出,然后你就让线程有机会做任何事情。在这个简单的简单示例中,您可以简单地
sleep(2);
在致电detachNewThreadSelector:
之后
在更复杂的情况下,您可能需要在主线程上调用CFRunLoopRun();
,或采取其他操作来保持第二个线程处于活动状态。
答案 1 :(得分:1)
你犯了一个错字。 Runner
中的方法定义为rumMe
,但在主程序中使用runMe
。