헤더를 중지 :인스턴스 변수는 실행 스레드
@interface CodeTest : NSObject {
BOOL cancelThread;
}
-(void) testCode;
-(void) stopRunning;
-(void) startRunning;
@property (assign) BOOL cancelThread;
@end
구현 : 당신이 볼 수 있듯이
-(void)stopRunning{
self.cancelThread = YES;
}
-(void)startRunning{
self.cancelThread = NO;
[NSThread detachNewThreadSelector:@selector(testCode) toTarget:self withObject:nil];
}
-(void)testCode{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSLog(@"STARTED");
/* Std C99 code */
while(conditions){
if(self.cancelThread){
conditions = NO;
}
...
...
}
/* end of C code */
[pool release];
}
, 그것은 타이어는 별도의 스레드에서 testCode을 실행하고 정지로 cancelThread BOOL을 사용하는 별도의 스레드에서 실행 플래그.
- 컴파일러 신호 성병 C 코드의 중간
self.cancelThread
는 (자체가 정의되지 않은) 유효하지 :는 I는 다음의 문제를 가지고있다. 제 생각에는,이 문장을 C 코드로 해석하려고 시도하지만 이것은 obj-c입니다.
뭔가가 있습니까?
업데이트 : {} 님의 제안 중 하나가 누락 된 것과 관련이 없습니다. if(self.cancelThread){ conditions = NO; }
없이 코드가 완벽하게 작동합니다.
'@property (assign) BOOL cancelThread;에서 경고를받지 못하겠습니까? 나는 이것에 대한 해결책은 아니라고 생각하지만'@property (nonatomic) BOOL cancelThread'을 필요로하고'testCode'메소드 안에 autorelease 풀을 설정해야합니다. (NSThread 호출을 감싸지 않음) – nacho4d
@ nacho4d 실제로, 값이 여러 스레드에 의해 설정/검사되고 있기 때문에이 경우에는 "비 원자력"을 원하지 않을 것입니다. 'testCode' 메쏘드 안에서 autorelease 풀을하는 것이 옳습니다. –
감사합니다. 말한대로 autorelease 풀을 수정했습니다! – Kami