Issue with NSRunLoop
Issue with NSRunLoop
- Subject: Issue with NSRunLoop
- From: Sasikumar JP <email@hidden>
- Date: Thu, 02 Jun 2011 09:40:02 +0530
Hi,
I am working on an audio streaming iPhone application.
When user taps the play button, i starts the internal thread to receive
the stream audio and i have scheduled the stream source with NSRunLoop like
below
[_stream scheduleInRunLoop:[NSRunLoop currentRunLoop]
forMode:NSDefaultRunLoopMode];
When ever user taps the stop button, i want to stop the playback and
terminate the secondary thread.
when i do so, playback stopped, But the thread is not terminating as it
stuck in the Runloop's runMode method. it never returns.
- (BOOL)shouldStopAudioPlayback
{
if (_playerState == kStreamPlayerEngine_Stopped ||
_playerState == kStreamPlayerEngine_ConnectionClosed ||
_playerState == kStreamPlayerEngine_ConverterFailure) {
printf("shouldStopPlyback = YES\n");
return YES;
}
printf("shouldStopPlyback = FALSE\n");
return NO;
}
- (void)startInternalThread
{
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
[self initializeAudioPlayBuffer];
[self openReadStream];
BOOL isRunning = YES;
do {
printf("before runloop\n");
isRunning = [[NSRunLoop currentRunLoop] runMode:NSDefaultRunLoopMode
beforeDate:[NSDate
dateWithTimeIntervalSinceNow:0.25]];
printf("after runloop\n");
} while (isRunning && ![self shouldStopAudioPlayback]);
[self cleanupAudioPlayBuffer];
[_internalThread release];
_internalThread = nil;
[pool release];
NSLog(@"Exiting from Thread");
}
- (void)play
{
if ([NSThread isMainThread]) {
_internalThread = [[NSThread alloc] initWithTarget:self
selector:@selector
(startInternalThread)
object:nil];
[_internalThread setName:@"StreamPlayer Thread"];
[_internalThread start];
}
}
- (void)stop
{
OSStatus error;
error = AUGraphStop(mGraph);
if (error) {
[self printErrorMessage:@"AUGraphStop failure" withStatus:error];
}
self.playerState = kStreamPlayerEngine_Stopped;
printf("stopped AUGraph\n");
return;
}
Trace log
=============
before runloop
after runloop
shouldStopPlyback = FALSE
before runloop
after runloop
shouldStopPlyback = FALSE
before runloop
after runloop
shouldStopPlyback = FALSE
before runloop
after runloop
shouldStopPlyback = FALSE
before runloop
stopped AUGraph
I am not sure what is the issue here. Please any one guide me what is the
wrong with above code in handling the RunLoop.
Thanks
Sasikumar JP
_______________________________________________
Cocoa-dev mailing list (email@hidden)
Please do not post admin requests or moderator comments to the list.
Contact the moderators at cocoa-dev-admins(at)lists.apple.com
Help/Unsubscribe/Update your Subscription:
This email sent to email@hidden