user2365865
user2365865

Reputation:

Run C function in background in Objective-C

I want to call a C function in a Objective-C app. The function contains an endless loop. So I need to run this C function in background.

Here's my C function:

int go(){
    for(;;){
        //...
    }
    return 0;
}

And the call:

[self performSelectorInBackground:go() withObject:nil];

The function go() is called but it's not running in background (and the app stop working...).

Upvotes: 0

Views: 460

Answers (2)

Ryan Poolos
Ryan Poolos

Reputation: 18551

Even in the background you probably should run something in an endless loop. However it is possible.

[self performSelectorInBackground:<selector> withObject:<Object>];

That is a nice convenience method to just throw a method to the background thread. But you also have access to Grand Central Dispatch that would let you put blocks of code into a background thread as well. You could even give it a private queue so it wouldn't block your background queue.

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND, 0), ^{
    // Your code
    go();
});

Upvotes: 2

nhgrif
nhgrif

Reputation: 62052

Hmm, there may be an easier way, but...

- (int)doGo {
    return go();
}

Then...

[self performSelectorInBackground:@selector(doGo) withObject:nil];

So, this answer really just highlights what I believe is the most fundamental problem with your provided code, but you should certainly see Ryan's answer and use GCD. performSelectorInBackground: really isn't all that great.

Upvotes: 1

Related Questions