Re: Recurrent background thread
Re: Recurrent background thread
- Subject: Re: Recurrent background thread
- From: Doug Hill <email@hidden>
- Date: Fri, 13 May 2016 12:56:04 -0700
I’ve had luck using dispatch queues to accomplish recurring events, specifically dispatch_after. For example:
- (void) doStuffAfterDelay
{
dispatch_queue_t theQueue = dispatch_queue_create("Recurring work queue", DISPATCH_QUEUE_SERIAL);
dispatch_time_t futureTime = dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1 * NSEC_PER_SEC));
dispatch_after(futureTime, theQueue,
^{
DoStuff();
[self doStuffAfterDelay];
;});
}
You can also use an NSTimer that repeats, such as:
NSTimeInterval delaySecs = 5;
self.timer = [NSTimer scheduledTimerWithTimeInterval:delaySecs
target:self selector:@selector(doStuff:)
userInfo:nil repeats:YES];
Hope this helps.
Doug Hill
> On May 13, 2016, at 12:34 PM, Carl Hoefs <email@hidden> wrote:
>
> I want a method running on a background thread to reissue itself after it is done processing. How can I do this?
>
> I'm using the following code but it runs just once and is never heard from again...
>
> // initial invocation from main thread
> [self performSelectorInBackground:@selector(_checkSensor:) withObject:@50];
>
>
> // target method on background thread
> -(void)_checkSensor:(NSNumber *)delaySecs
> {
> // check sensor...
> // processing...
>
> // reschedule
> [NSObject cancelPreviousPerformRequestsWithTarget:self selector:_cmd object:nil];
> [self performSelector:_cmd withObject:nil afterDelay: delaySecs];
> }
>
> As a test, the above works if run on the main thread, so I'm guessing it has something to do with there being no runloop after the background thread exits.
> -Carl
_______________________________________________
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