调用将在指向函数的指针上启动 NSThread 的函数
Call a function that will start a NSThread on a pointer to function
我正在尝试在 ObjectiveC 中做一些事情(这远不是我所知道的语言),但我不确定是否可行。
我有一个接口 QAFeatTestCaseBase,它有一个函数可以创建一个线程并在其中启动一个函数,然后等待它完成:
- (void)callInBackground:(id)target selector:(SEL)selector
{
NSThread* thread = [[NSThread alloc] initWithTarget:self selector:@selector(selector) object:nil];
[thread setStackSize: 2*1024*1024];
[thread start];
while([thread isFinished] == NO) { usleep(1000); }
[thread release];
}
然后我继承它来实现一个特定测试的功能:
@interface Bug8772 : QAFeatTestCaseBase
- (void) testBug8772
{
[self callInBackground:self selector:@selector(Bug8772)];
}
- (void)Bug8772
{
// do stuff..
}
但我有一个错误:捕获 NSInvalidArgumentException [NSThread initWithTarget:selector:object:]: 目标未实现选择器 (*** - [Bug8722 选择器])
你能指出我做错了什么吗?或者是否有更好的方法来做到这一点?
selector
已经是一个选择器。不要用 @selector
.
包裹它
- (void)callInBackground:(id)target selector:(SEL)selector
{
NSThread* thread = [[NSThread alloc] initWithTarget:self selector:selector object:nil];
[thread setStackSize: 2*1024*1024];
[thread start];
while([thread isFinished] == NO) { usleep(1000); }
[thread release];
}
请注意,NSThread
很难正常工作。我不认为上面的代码会做你想要的。
要获得更好的答案,请查看 Dispatch。 Dispatch 也称为 GCD 或 Grand Central Dispatch。
我正在尝试在 ObjectiveC 中做一些事情(这远不是我所知道的语言),但我不确定是否可行。
我有一个接口 QAFeatTestCaseBase,它有一个函数可以创建一个线程并在其中启动一个函数,然后等待它完成:
- (void)callInBackground:(id)target selector:(SEL)selector
{
NSThread* thread = [[NSThread alloc] initWithTarget:self selector:@selector(selector) object:nil];
[thread setStackSize: 2*1024*1024];
[thread start];
while([thread isFinished] == NO) { usleep(1000); }
[thread release];
}
然后我继承它来实现一个特定测试的功能:
@interface Bug8772 : QAFeatTestCaseBase
- (void) testBug8772
{
[self callInBackground:self selector:@selector(Bug8772)];
}
- (void)Bug8772
{
// do stuff..
}
但我有一个错误:捕获 NSInvalidArgumentException [NSThread initWithTarget:selector:object:]: 目标未实现选择器 (*** - [Bug8722 选择器])
你能指出我做错了什么吗?或者是否有更好的方法来做到这一点?
selector
已经是一个选择器。不要用 @selector
.
- (void)callInBackground:(id)target selector:(SEL)selector
{
NSThread* thread = [[NSThread alloc] initWithTarget:self selector:selector object:nil];
[thread setStackSize: 2*1024*1024];
[thread start];
while([thread isFinished] == NO) { usleep(1000); }
[thread release];
}
请注意,NSThread
很难正常工作。我不认为上面的代码会做你想要的。
要获得更好的答案,请查看 Dispatch。 Dispatch 也称为 GCD 或 Grand Central Dispatch。