問題タブ [nsoperationqueue]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
iphone - NSOperationKVOの問題
次の関数を使用して、nsoperationqueueでの操作が終了した後にアプリケーションに通知を受け取り、操作の結果に応じてタスクをスケジュールできるようにしています。私が使用しているもの:
私の質問は、これらの操作に割り当てられたタスクのほとんどは、他のボタンをタップしようとしたり、基本的にアクションを実行しようとしたりすると、データの解析であるため、次の例外が発生します。
私はメインスレッドで他のことをしようとしているので、メインスレッドへの呼び出しが原因であることを完全に理解しています。
実行に失敗します。しかし、この問題の解決策は、ユーザーがリクエストを行った後に任意のアクションを実行できるようにすることと、操作に割り当てられたタスクを完了した後にスケジュールされたアクションを実行できるようにすることの両方を許可することです。
それは本当に可能ですか?
よろしくお願いします。
iphone - NSOperationQueue スレッドのディスパッチが遅い?
NSOperationQueue を使用して最初のマルチスレッド iPhone アプリを作成しています。これは、独自のスレッド ディスパッチを管理するよりもロードが優れており、潜在的に高速であると聞いたからです。
ボードを別々のピースに分割し、別々のスレッドで各ボードを計算してから、それらをつなぎ合わせることによって、ライフ ゲーム ボードの結果を計算しています。 . ボードごとに NSInvocationOperation オブジェクトを作成し、それらを OperationQueue に送信しています。ボードのすべてのパーツを送信したら、OperationQueue への waitUntilAllOperationsAreFinished 呼び出しですべての計算が完了するのを待ちます。
これは機能するはずのように見えますが、問題なく機能しますが、スレッドが非常にスローアウトされるため、マルチスレッド バージョンではシングル スレッド バージョンよりも計算に時間がかかります。ああ、いや!NSOperationQueue に送信された NSOperations の作成と終了を監視したところ、後で呼び出されるまでしばらくの間、Operation Queue do-diddly-daddlin に留まっているものがあることがわかりました。最初は、「キューが一度に処理できるスレッドの数は非常に多いかもしれない」と考えてから、キューの maxConcurrentOperationCount を任意の高い数値 (ボードピースの量をはるかに超える) に上げましたが、同じことを経験しました!
誰かが NSOperationQueue を「オーバードライブ」に追い込む方法を教えて、キューをできるだけ早くディスパッチするように言うことができるかどうか疑問に思っていました.それか、何が起こっているのか教えてください!
iphone - NSOperationQueue と ASIHTTPRequest
ASIHTTPRequestを中心に記述されたラッパー クラスのテスト ケースを作成しています。判断できない理由により、ASIHTTPRequestが完了する前にテスト ケースが失敗して完了します。
プログラムの流れは次のとおりです。
- 私のテストケースから始めます。
- httpエンジンオブジェクトを初期化し、新しいリストを作成するように指示します
- 新しい ASIHTTPRequest オブジェクトを作成してセットアップします。
- リクエストを操作キューに追加します。
- そのキューが空になるまで待ちます
- デリゲート メソッドが呼び出されたかどうかを確認し、呼び出されていない場合はテストに失敗します。
現在、ほとんどの場合、すべてが正常に機能し、テストに合格しますが、操作キューが待機メソッドに制御を返した後にデリゲート メソッドが呼び出されたため、失敗する場合もあります。
テストケース
エンジンコード
cocoa - NSOperations がフェイルセーフな方法で確実に実行されるようにするにはどうすればよいですか?
私が欲しいもの
アプリケーションに NSOperationQueue があり、アプリケーションが終了する前にすべての操作が処理されることが重要です。終了する前に NSOperationQueue が空であることを確認するために、終了時に次のコードを取得しました。
終了する前に NSOperation が「フリーズ」し、キュー全体がブロックされる前に、コードで問題が発生しました。明らかに、このような状況では、私のコードは例外をスローする必要があり、現在は例外をスローしています。
しかし、操作が停止してキューをブロックし、アプリケーションが終了せず、障害が検出されないという奇妙な事態が発生するのを防ぐ必要があります。
私のごみの解決策
操作を終了するキューにタイムアウトを設定することを検討しています。その後、タイムアウトしたときに例外をスローして、問題をキャッチできます。
しかし、これは正しくありません。理想的には、作業が完了したことを確認するためにタイマーに依存したくありません。
私の質問
操作が停止していないことを確認する、フェイル セーフな方法はありますか?
iphone - 非同期 ASIHTTPRequest を開始する NSOperationQueue に NSOperation を追加する
そのため、バックグラウンド スレッドでデータをダウンロードするすべての REST 呼び出しを実行して、UI の応答性を維持しようとしています。
NSOperationQueue を含むビューコントローラーがあります。NSOperation のサブクラスであるインポーター クラスのインスタンスを作成します。インポーターの main() メソッド内で、ASIHTTPDataRequest を設定しています。リクエストを作成したら、リクエストを開始します。
問題: リクエストで「startAsynchronous」を呼び出してリクエストを開始すると、問題が発生しました。デリゲート コールバックが呼び出されることはありません。リクエストが開始され、そのデータがダウンロードされますが、デリゲート コールバック メソッドが呼び出されることはありません。
私の解決策:リクエストを同期的に開始すると、すべてが正常に機能するようです(つまり、コールバックなど)。これは正しい解決策ですか?
同期呼び出しが機能するのに、非同期呼び出しが機能しないのはなぜですか? Apple の「TopSongs」サンプルを参考にして、インポーター クラスをモデル化しています。
objective-c - NSOperationQueueが単体テストで終了するまで待つにはどうすればよいですか?
問題
- NSOperationQueueという名前があります
logEntryGeneratorQueue
- キューのすべての操作が完了するまで待ちたい
私が使用する場合:
キューに追加するスレッドがバックグラウンド自体にある場合は、正常に機能します。
ただし、単体テストでこのコードを実行している場合は、メインスレッドで実行されます。それで私はこの「解決策」を思いつきました、それは私が本当に好きではありません:
これは常に理想的とは言えませんでしたが、10.5では常に正常に機能していました。ただし、プロジェクトを10.6 SDKを使用するようにアップグレードしたため、これが機能しなくなりました。
あるテストでは、テストが完了する前に実際にテストを終了しました。理由はわかりません。10.6ではNSOperationQueuesの動作が異なっていたのと関係があると思いますが、現在はGCDを使用しています。
私が試したこと
runUntilDateをsleepに置き換えてみました。これは、私が思ったように、すべてのテストがここに到達すると永久に一時停止することを意味します。
私の質問
NSOperationQueueがメインスレッドで終了するのを待つより良い方法はありますか?そうでない場合、どうすればこのコードを10.6で動作させることができますか?
objective-c - 単体テストの途中でアプリケーションが終了するのはなぜですか?
問題
単体テストを実行します。ある時点で、私は以下を使用して待機します。
NSOperationQueueが空になるようにします。私のアプリがこの行に達すると、すぐに終了します。他のテストとまったく同じ行を実行します。最近、すべてのテストが完全に機能していました。また、起動時にアプリがすぐに終了することもあります。
一体何が起こっているのですか?
iphone - NSOperationQueue と dealloc が呼び出されてアプリがクラッシュする問題
次のように、キューに NSOperation を作成しました。
これは正常に動作しますが、操作が完了する前にビューがポップされると、アプリは「EXC_BAD_ACCESS」でクラッシュします
cancelAllOperations を呼び出して操作キューをキャンセルしようとしましたが、既に処理中のため、アプリのクラッシュを防ぐことはできません。ドコは、操作が実行されている場合、操作がキャンセルされたことを検出して適切に応答するのは操作次第であると言っていますが、これをどのように実装するかはよくわかりません。
何か案は?
iphone - NSOperationを一時停止します
私はそれNSOperationQueue
にいくつかを持ってNSOperations
います(NSInvocationOperations
特に)。この操作は、いくつかの計算を実行し、それに応じて(もちろん、を介して)UI要素の状態を変更performSelectorOnMainThread:...
します。多くの場合、アニメーションを使用します。
私のUIには、UINavigationViewControllerと、別のビューに移動するためのいくつかのボタンがあります。そのため、計算/アニメーションの進行中に、ユーザーは現在のビューを離れることができます。そして、私が必要としているのは、ユーザーが現在のビューに戻るまで、これをなんとかして停止することです。
私が見つけた唯一の解決策は、スレッドセーフなブールフラグを作成し、それをすべてのスレッドでチェックすることです(while!flag sleep_for_some_time;など)。もっと良いものはありますか?
iphone - ASINetWorkQueue からすべてのリクエストを削除します
永続的な方法で ASINetworkQueue からリクエストを削除する方法を知っている人はいますか? リセット機能は機能していないようです。私がやろうとしていることは次のとおりです