メインスレッド以外で実行できるか試してみました。
main()の中だけ修正し、他はいじりませんでした。
main()のコードは以下の通りです。
参考: apply.c - Dispatch_Samples - Apple Developerint main(int argc, char* argv[]) {if (argc != 3) {printf("usage: ./Mp3Decoder inFile outFile\n");return 0;}dispatch_group_t group = dispatch_group_create();dispatch_group_async(group, dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{OSStatus err = DecodeFileAtPath(argv[1], argv[2]);printf("done. err:%d\n", err);});dispatch_group_wait(group, DISPATCH_TIME_FOREVER);return 0;}
参考: エキスパートObjective-Cプログラミング -iOS/OS Xのメモリ管理とマルチスレッド- - Amazon
実行した結果、サブスレッドでも正常動作することを確認できました。
(ただし、Cocoaアプリ内のサブスレッドでも正常動作することを裏付けるものではないと思います)
Objc-CやSwiftを使っているならNSOperationを使うほうが楽そうですね。
あー、あとGrand Central Dispatch(GCD)関連のドキュメントを漁っていて、
Apple公式の"Introducing Blocks and Grand Central Dispatch"が入手できなかったのは
非常に残念&腹立たしかったです。