2016-12-01 1 views
0

Ich starte meine JAR mit AppleScript, die in meinem Ziel-c-Code enthalten sind.Nicht möglich, einen neuen Thread in Objective zu erzeugen - C

Ich möchte diese Operation in einem neuen Thread (NSThread) ausführen.

Hinweis: Ich habe GCD verwendet, aber es hilft mir nicht, da sogar die gleichzeitige Warteschlange eine Abhängigkeit vom Hauptthread hat.

-(void) launchJar{ 
     NSAppleScript *script = [[NSAppleScript alloc] initWithSource:scriptToLaunch]; 
    [script executeAndReturnError:nil]; 

    NSLog(@"hitting this point"); 
} 


int main(int argc, char *argv[]) { 
     @autoreleasepool { 
      MCMCustomURLSchemeHandler *mcmCustomURLHandler = [[MCMCustomURLSchemeHandler alloc] init]; 


        [NSThread detachNewThreadWithBlock:@selector(launchJar) toTarget:[JARLauncher class] withObject:nil]; 



      return NSApplicationMain(argc, argv); 
     } 
    } 

Antwort

1

Sie sollten die Aussagen von launchJar in einen Autofreigabepool setzen:

- (void)launchJar { 
    @autoreleasepool { 
     NSAppleScript *script = [[NSAppleScript alloc] initWithSource:scriptToLaunch]; 
     [script executeAndReturnError:nil]; 
     NSLog(@"hitting this point"); 
    } 
} 

BTW: Sie vermeiden sollten Themen mit NSThread direkt starten. Versuchen Sie NSOperationQueue oder GCD stattdessen.

+0

Ich folgte Ihrem Rat und ließ es laufen. Ich hatte auch ein Problem damit, wo ich meine launchJar-Methode platziert habe. Das Lösen dieser Tatsache ließ mich ein anderes Problem erkennen: http://stackoverflow.com/questions/40904677/how-doi-ihnure-that-i-close-my-app-only-when-all-the-threads -have-finished-exec Könnten Sie einen Blick darauf werfen? –

Verwandte Themen