問題タブ [grand-central-dispatch]

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.

0 投票する
2 に答える
2811 参照

iphone - クラスメソッド内でグランドセントラルディスパッチを使用すると、メモリリークが発生します

ビュー コントローラーが、gcd キューを作成する行でモデル クラス メソッドを呼び出すと、メモリ リークが発生します。何か案は?

0 投票する
4 に答える
439 参照

multithreading - シリアル キューで実行するようにスケジュールされたブロックは、すべて同じスレッドで実行されると想定できますか?

OpenGL を使用する Mac OS 10.6 用のアプリを作成しています。レンダリングを (メイン スレッドではなく) セカンダリ ディスパッチ キューにオフショアしたいと考えています。

私が理解していることから、グラフィックス作業を行うには、スレッドローカルの OpenGL コンテキストを使用する必要があります。私の計画は、最初のブロックでそれへの参照を取得し、同じインスタンスを何度も再利用することです。

ただし、ディスパッチ キューとスレッドは同じではありません。Xcode 4 のデバッガーは、キューが複数のスレッドを使用できることを示しています。したがって、私が行っていることが安全かどうかはわかりません (並列キューだけが複数のスレッドを使用できると信じていますが)。

シリアル キューに送信されたすべてのブロックが同じスレッドに送信されるという保証はありますか? NSOpenGLView代わりに、現在の OpenGL コンテキストを取得して、各フレームで自分に割り当てる必要がありますか?

0 投票する
2 に答える
13461 参照

iphone - GCD/dispatch_async で cancel/isCancelled を使用できますか?

GCD で起動したスレッドで cancel/cancelAllOperations/.isCancelled を使用できますか?

現在、ブール値をフラグとして使用して、バックグラウンド プロセスをキャンセルしています。

バックグラウンドで多くの処理を行いながら、UI の応答性を維持して、キャンセル ボタンをキャッチできるようにしたいとします (または、プロセッサが動作していることを示すために何かをアニメーション化します)。これが私たちがそれを行う方法です...

CHECKER は、フラグが true であることを確認するだけです...

これはすべて完璧に機能します。

しかし........この種の GCD の使用で cancel/cancelAllOperations/.isCancelled を使用することは可能ですか?

ここでの話は何ですか?乾杯。


PS - この「6 つの部分」の背景テンプレートを使用する初心者向けです。

以下で BJ がハイライトしているように、bg プロセスを中断するたびに注意してください...

開いている変数はすべてクリーンアップする必要があります。

私のイディオムでは、すべての変数、コンテキスト、メモリなどを、具体的には「setUpHere」で割り当てる必要があります。そして、それらを「wrapUpH​​ere」で解放する必要があります。(このイディオムは、BG にいる間にどんどん深くなっていくと機能し続けます。)

または、BJ が例で示していることを正確に実行します。(BJのメソッドを使う場合は、深入りする場合は注意してください。)

どの方法を使用する場合でも、BG プロセスを中断するときに、開いている変数/コンテキスト/メモリをクリーンアップする必要があります。いつか誰かの役に立てば幸いです!

0 投票する
1 に答える
1877 参照

iphone - グローバルディスパッチキューを使用している場合、NSURLConnection デリゲートメソッドが呼び出されないのはなぜですか?

私が次のことをするとき:

デリゲートのメソッドが呼び出されることはありません。しかし、私がするとき

彼らは呼ばれます。なんで?

UPD

http://developer.apple.com/library/ios/#qa/qa1712/_index.html

今、私は NSURLConnection を作成します。NSURLConnection を開始します。メインスレッドで。

0 投票する
3 に答える
19635 参照

objective-c - グランドセントラルディスパッチの簡単な例

私は Mac の初心者プログラミングで、Grand Central Dispatch には本当に驚いています。私はそれについて読んで、並列プログラミングの完璧なソリューションのように見えます。私は POSIX スレッドを扱っていましたが、GCD に移行したいと考えています。

Apple Developer Connection でサンプル コードを見ましたが、とても混乱しました。2 つのスレッドを開始する簡単な例を検索しましたが、見つかりません。

GCDを使用してこのサンプルコードを実行するにはどうすればよいですか???

前もって感謝します

0 投票する
4 に答える
18954 参照

objective-c - GCD ディスパッチ キュー プロパティを解放する正しい方法は何ですか?

次のように、所有者のプロパティを介してアクセスされるdispatch_queueを使用しています。

assignキーワードに注意してください。キューはオブジェクトの存続期間を通じて使用されるため、オブジェクトによって所有されます。所有しているオブジェクトの割り当てが解除されたら、キューを解放します。

これを適切にリリースするにはどうすればよいですか?使用するとretain/releaseうまくいきますか?

release の呼び出し中にキューで保留中/実行中のものがあった場合はどうなりますか?

0 投票する
1 に答える
13241 参照

multithreading - GCD と performSelectorInBackground の比較: dispatch_async がバックグラウンドにない

Grand Central Dispatch は優れており、コードの量を削減しますが、バックグラウンド スレッドで何かを実行できないのはなぜですか?
私が何を意味するかを示すサンプルアプリケーションを作成しました(コメントされた作業はありません):

これ[NSThread sleepForTimeInterval:3];は、デフォルトの UI 機能をシミュレートするためのものです。たとえば、あるナビゲーション ビューから別のナビゲーション ビューに切り替えている場合などです。
新しいビュー ベースのアプリケーションにコードをコピーし、2 つのボタンを作成して接続するだけです。

0 投票する
2 に答える
1842 参照

iphone - ブロックとViewControllerスレッドセーフ

私はGameCenterのコード例であるGKTapperを見てきましたが、開発者が彼の実装についてコメントしているセクションはあまり意味がありません。コードは下に挿入されています。私が理解していないのは、メインスレッドでビューコントローラーを変更するブロックをディスパッチすることが安全でないのはなぜですか?

彼は、「ビューコントローラがセカンダリキューで実行されるブロックで参照されている場合、メインキューの外で解放される可能性があります。これは、実際のブロックがメインスレッドでスケジュールされている場合でも当てはまります」と述べています。リリースを処理するコードがメインUIスレッド(メインランループ)にある場合、それはどのように可能ですか?または、Blocks / GCDで取得できないものはありますか?

私にとってさらに興味深いのは、彼の解決策がこの問題をどのように解決するかということです。「「callDelegate」がデリゲートにアクセスする唯一のメソッドであるため、どのブロックコールバックにもデリゲートが表示されないようにすることができます。」(ここでは、デリゲートはビューコントローラーです)

誰かがこのすべてについて私に教えてもらえますか?私はブロックとGCDにまったく慣れていないので、おそらく単純なものが欠けています...

0 投票する
1 に答える
391 参照

haskell - Haskell、FFI、Grand Central Dispatch?

FreeBSD、OSX、iOSでのC/Objective-Cの環境でうまく機能する関数型言語を検討しています。私の最善の策は、Haskellで記述された特定の関数用の関数型ライブラリを作成し、GHCでコンパイルし、FFIを使用してこの関数型コードを標準のC呼び出しとして呼び出すことです。

私の質問は、この状況で並行性をどのように処理するかです。 関数型言語を使用する動機の1つは、不変のデータセットを操作したいという問題に対して、多くの並列化を実行したいということです。ただし、ここで詳しく説明するアプローチを使用すると、並列化は可能ですか?コンパイルして2つのスレッドを使用するように指示できるようですが、スレッドの代わりにGCDを使用する方法はありますか(プラットフォームごとに自動的にスケーリングされる並列化の量など、GCDがスレッドよりも優れているすべての理由で)?または、私が説明しているようにFFIを使用すると、マルチスレッド機能が完全に失われますか?

この言語は私がやろうとしていることと最もよく一致しているように見えますが、本当にそれを学ぶためにかなりの時間を費やす前に、それが適切かどうかを学びたいと思います

0 投票する
2 に答える
2099 参照

iphone - NSManagedObjectContext と GCD

Apple のCore Data Programming Guideから:

各スレッドに独自の完全にプライベートなマネージド オブジェクト コンテキストを与え、関連するオブジェクト グラフをスレッドごとに分離しておく必要があります。

それは、あなたに代わって自動的に作成されるスレッドを完全に制御できないグランド セントラル ディスパッチにどのようにスケールしますか?

私が今行っている方法はNSManagedObjectContext、ディスパッチ キューごとに 1 つ持つことですが、それが問題です。ディスパッチ キューは必ずしも毎回同じスレッドを使用するとは限りませんよね?