0

スクリプト ブリッジを使用して、ココア アプリケーションから iTunes にクエリを実行しています。ときどき iTunes がウィンドウをポップアップ表示し (iPod の更新が必要な場合など)、ポップアップ ウィンドウが開いている間は iTunes から情報を取得できません。したがって、この状態で iTunes に情報を要求すると、そのポップアップ ウィンドウが閉じられるまで、アプリケーションは完全にロックアップします。

したがって、iTunes に別のスレッドで簡単なことを尋ねて、そこから応答を取得できるかどうかを確認できる何らかのメカニズムが必要です...そして、その別のスレッドが短時間内に応答を受信しない場合、私のメインthread はそのスレッドを強制終了するだけなので、その特定の時間に iTunes にクエリを実行しないことがわかります。

そのようなメカニズムを作成する方法はありますか?スレッドを強制終了する方法を探しましたが、見つかりませんでした。

4

2 に答える 2

1

あなたの問題はスレッドとは関係ありません。タイムアウトが長すぎるということです。何をしていても、約 1 分後に失敗するはずです。

これを修正するには、SBApplication オブジェクトsetTimeout:にメッセージを送信し、待機させたい時間を渡します。値はティック単位で、1 秒あたり正確に 60 です。

(いくつかの情報源は 60.15 と言っており、Apple 自身のドキュメントでは「およそ」60 と言っていますが、私はちょうど 10 分分の を測定したところTickCount、600 秒で割った結果は正確に 60.0 でした。私が使用したコード:
NSLog(@"Ticks per second: %f", (end - start) / (60.0 * numMinutes));whereendstartare results from TickCount. )

于 2010-02-25T13:13:54.527 に答える
0

NSOperation/NSOperationQueue を確認してください。

于 2010-02-23T17:13:43.853 に答える