2010-05-12 52 views
2

Comme je l'ai compris, les threads fournis par GCD ont un runloop mais pas de source/port. Maintenant j'utilise certaines des méthodes qui appellent AppleScripts à travers AppleEvents dans une NSOperationQueue. Et parfois, mon application tombe en panne avec stacktrace suivant.GCD et AppleEvents/NSOperationQueue et AppleScript

mes questions:

  • Utilisation de AppleScript dans un NSInvocationOperation ou NSBlockOperation
  • Utilisation de l'intérieur AppleEvents GCD Threads
  • dois-je ajouter une source/port à un runloop d'un gcd- thread avant d'utiliser AppleEvents?
  • dois-je ajouter une source/un port à une boucle d'exécution d'un thread gcd avant d'utiliser [comm. CATransaction]?
  • dois-je ajouter une source/un port à une boucle d'exécution d'un thread gcd avant d'utiliser [NSObject performSelectorAfterDelay ...]?
  • si oui, comment?
  • puis-je simplement appeler CFRunLoopRunInMode (kCFRunLoopDefaultMode, 5.0, false); /// ou 30 ou le délai d'attente défini d'appleevent?
 
.. 

Thread 9: Dispatch queue: com.apple.root.default-priority 
0 libSystem.B.dylib 0x00007fff88276e82 semaphore_wait_signal_trap 10 
1 libSystem.B.dylib 0x00007fff8827c3cd pthread_mutex_lock 469 
2 com.apple.applescript 0x000000011d3d461f AppleScriptComponent 50 
3 com.apple.applescript 0x000000011d3edbcc AGenericCall::Delegate(ComponentInstanceRecord*) 46 
4 com.apple.applescript 0x000000011d3ed520 AGenericManager::HandleOSACall(ComponentParameters*) 54 
5 com.apple.applescript 0x000000011d3ed4b0 GenericComponent 219 
6 com.apple.openscripting 0x00007fff8381c6da OSAExecuteEvent 63 
7 com.apple.Foundation 0x00007fff86f320d8 -[NSAppleScript(NSPrivate) _executeAppleEvent:withMode:error:] 161 
8 xxx 0x0000000100048af0 -[TCallScript callScript:withArrayOfParameters:] 480 
9 xxx 0x0000000100048ffd -[TCallScript callHandler:withParameters:] 477 
10 xxx 0x0000000100036032 -[ZFOpenWindowController getSafariItemForCurrentTabForWindow:] 66 
11 xxx 0x00000001000346af -[ZFOpenWindowController refreshWindowList:] 1679 
12 xxx 0x000000010003541c -[ZFOpenWindowController bringZFToForegroundZoomOut:orJustLinkFrontMost:toItem:] 2988 
13 xxx 0x0000000100053556 __-[ZFSelectionTool openWithPreferredApplication:]_block_invoke_516 54 
14 com.apple.Foundation 0x00007fff86ed87d9 -[NSBlockOperation main] 140 
15 com.apple.Foundation 0x00007fff86ec906d -[__NSOperationInternal start] 681 
16 com.apple.Foundation 0x00007fff86ec8d23 ____startOperations_block_invoke_2 99 
17 libSystem.B.dylib 0x00007fff882b2ce8 _dispatch_call_block_and_release 15 
18 libSystem.B.dylib 0x00007fff88291279 _dispatch_worker_thread2 231 
19 libSystem.B.dylib 0x00007fff88290bb8 _pthread_wqthread 353 
20 libSystem.B.dylib 0x00007fff88290a55 start_wqthread 13 


... 


Thread 11 Crashed: Dispatch queue: com.apple.root.default-priority 
0 com.apple.applescript 0x000000011d40f658 BCHandleError() 182 
1 com.apple.applescript 0x000000011d4059ca UASExecute1() 2546 
2 com.apple.applescript 0x000000011d3dd1d5 ASExecuteEvent(AEDesc const*, unsigned int, int, unsigned int*) 695 
3 ...ple.CoreServices.CarbonCore 0x00007fff85388e04 CallComponentFunction 28 
4 com.apple.applescript 0x000000011d3d4cad AppleScriptComponent 1728 
5 com.apple.applescript 0x000000011d3edbcc AGenericCall::Delegate(ComponentInstanceRecord*) 46 
6 com.apple.applescript 0x000000011d3ed520 AGenericManager::HandleOSACall(ComponentParameters*) 54 
7 com.apple.applescript 0x000000011d3ed4b0 GenericComponent 219 
8 com.apple.openscripting 0x00007fff8381c6da OSAExecuteEvent 63 
9 com.apple.Foundation 0x00007fff86f320d8 -[NSAppleScript(NSPrivate) _executeAppleEvent:withMode:error:] 161 
10 xxx 0x0000000100048af0 -[TCallScript callScript:withArrayOfParameters:] 480 
11 xxx 0x0000000100048ffd -[TCallScript callHandler:withParameters:] 477 
12 xxx 0x0000000100035c67 -[ZFOpenWindowController getItemForAXDocumentOfFrontMostWindow] 119 
13 xxx 0x00000001000359f1 -[ZFOpenWindowController getItemForFrontMostWindow:] 721 
14 xxx 0x00000001000348ac -[ZFOpenWindowController bringZFToForegroundZoomOut:orJustLinkFrontMost:toItem:] 60 
15 xxx 0x0000000100053556 __-[ZFSelectionTool openWithPreferredApplication:]_block_invoke_516 54 
16 com.apple.Foundation 0x00007fff86ed87d9 -[NSBlockOperation main] 140 
17 com.apple.Foundation 0x00007fff86ec906d -[__NSOperationInternal start] 681 
18 com.apple.Foundation 0x00007fff86ec8d23 ____startOperations_block_invoke_2 99 
19 libSystem.B.dylib 0x00007fff882b2ce8 _dispatch_call_block_and_release 15 
20 libSystem.B.dylib 0x00007fff88291279 _dispatch_worker_thread2 231 
21 libSystem.B.dylib 0x00007fff88290bb8 _pthread_wqthread 353 
22 libSystem.B.dylib 0x00007fff88290a55 start_wqthread 13 

Répondre

0

Notez que le composant AppleScript a limité la sécurité fil. Depuis 10.6, vous pouvez l'utiliser sur des threads non principaux, mais vous devrez créer une nouvelle ComponentInstance pour chaque thread. Je pense que vous pouvez le faire avec OSAKit, sinon vous aurez besoin de recourir à l'API gnarly Carbon. Ce qui est le mieux dépend de ce que vous essayez de réaliser (par exemple, exécutez-vous des scripts fournis par l'utilisateur, ou des scripts codés en dur dans votre application, et quelle est la motivation pour les exécuter via NSOperationQueue).