問題タブ [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.
objective-c - メインかどうかにかかわらず、どのGCDキューで実行されていますか?
私はいくつかのスレッドセーフなメソッドを書き込もうとしているので、以下を使用しています:
しかし、私が必要のないメインスレッドにいて、それらのディスパッチ呼び出しをすべてスキップできる場合は、現在どのスレッドにいるのか知りたいです。どうすればこれを知ることができますか?
または、おそらくそれは(パフォーマンスに)違いをもたらさないのでしょうか?
この比較をしても大丈夫ですか?
cocoa-touch - UIImage imageWithDataリーク(GCD)
こんにちは私は次のコードでInstrumentから報告されたリークを受け取っています。
Leaksは、私の画像= [UIImage imageWithData:imageData]がリークしていると報告していますが、その理由は何ですか?自動リリースされたUIImageオブジェクトのNSAutoreleasePoolが必要ですか?
ところで、それが問題なら、私は__block UIImage * image=nil;と宣言しました。上記のコードを入力する前に、ImageCacheで画像をチェックするためです。
objective-c - Cocoa ゲームがタイマーを作成するために Grand Central Dispatch を使用しないのはなぜですか?
Cocoa でゲーム ループを作成することについて、インターネット上でかなり話題になっています。私が見たゲーム ループのほとんどは、NSTimer を使用して 60 秒ごとにイベントをトリガーします。以下の Apple の開発者ドキュメントのソース コードのように、Grand Central Dispatch を使用する例がないように見えるのはなぜですか。私が知らない問題はありますか?
objective-c - マルチスレッドと自動解放プール
GCD を使用したマルチスレッドのスキルを習得しているときに、いくつかの質問に出くわしました。次のメソッドがあるとします。
ブロックの実行前に文字列を保持する必要があると思うので、これが正しいかどうか疑問に思っています。実際、イベントループが終了し、ブロックでstring
使用する前に自動解放メッセージを送信するのではないかと心配してstring
います。それはプログラムをクラッシュさせるでしょう。
私は正しいですか?保持および解放メッセージを送信する必要string
がありますか、これは正しい実装ですか? 前もって感謝します!
iphone - GrandCentralDispatchでシリアルキューを使用したdispatch_asyncとdispatch_sync
OK、私はGrand Central Dispatchが大好きで、比較的成功して使用した後ですが、これは私が完全には理解していないことです。
を使用して独自のシリアルキューを作成したとします。
その後、私はこれを行います:
最初のディスパッチは非同期です。それで、それは同時に行われますよね?myQueueがシリアルの場合、どうすればよいでしょうか。シリアルキューはどのようにして並行して、またはもしそうなら、順不同で物事を行うことができますか?
ありがとう
iphone - NSURLConnectionとグランドセントラルディスパッチ
NSUrlConnectionをgcdスタイルのブロックでラップし、low_priorityキューで実行することをお勧めしますか?
接続がメインスレッドで行われていないこと、および接続が非同期である必要があることを確認する必要があります。また、一度に複数のリクエストを同時に実行する必要があります。
gcdルートを使用すると、NSUrlConnectionDelegateメソッドが呼び出されるスレッドがわかりません。
NSURLConnectionはデリゲートに依存しているため、接続が完了すると、それを処理するラッパークラスが呼び出し元を呼び出す必要があります。接続作業の開始/終了時に呼び出されるさまざまなコールバックのすべてを処理する方法がわかりません。
同期バージョンを呼び出すだけで、gcdブロックにラップする必要がありますか?また、通話をキャンセルしたい場合は、「dispatch_suspend」を使用しますか?
objective-c - GCDのパフォーマンスが低い
覚えているかもしれませんが、私はGCDを使用して、コードの一部、つまり衝突検出および解決エンジンを高速化しようとしています。ただし、すべてのGCDコードがシリアルコードよりも大幅に遅く、一貫性が低いため(1.4倍から10倍遅い)、明らかに間違ったことをしています。例を挙げましょう。バブルソート方式で配列を反復処理して、その配列内のオブジェクト間で発生する可能性のあるすべての衝突を特定します。
非常に簡単で、問題の制約を考えるとうまく機能しているようです。ただし、コードセクションで各オブジェクトの状態が変更されていないことを利用し、GCDを使用してこの作業を並列化したいと思います。これを行うために、私は次のようなことを試みています:
誰かが私を正しい軌道に乗せるのを手伝ってくれて、おそらく良いGCDチュートリアルへのリンクを提供できますか?私はいくつかのGCDチュートリアルを調べ、すべてのドキュメントを精査しましたが、それでもこの主題についての私の理解はせいぜい希薄であると感じています。ありがとう!
iphone - グランドセントラルディスパッチでブロックから別のブロックにデータを渡す
変数を作成し、これを子ブロックに渡したい最上位ブロックがあります。
最上位ブロックで作成する配列に保持を追加する必要がありますか? あるデータを作成して別のデータに渡すので、これはスレッドセーフですか?
objective-c - Grand Central Dispatch: データ構造へのアクセスを制御するためのキューとセマフォ?
私は Macruby でこれを行っていますが、ここではそれほど重要ではないと思います。
状態を辞書データ構造に格納するモデルがあります。同時操作でこのデータ構造を散発的に更新したいと考えています。GCDは、これら2つを含む、これに対するいくつかの可能な解決策を提供しているように私には思えます:
- 何らかのシリアル キューに送信されるブロック内のデータ構造にアクセスするコードをラップする
- 構造体にアクセスするときに必要に応じて待機/シグナル呼び出しを送信するクライアント コードで、GCD セマフォを使用する
最初のソリューションのキューが同期的に呼び出されると、セマフォ ソリューションとほとんど同じように見えます。これらのソリューションのいずれにも、私が見逃している明確な利点がありますか? 私が見逃しているより良い代替手段はありますか?
また、GCD で読み取り/書き込み (共有排他) ロックを実装するのは簡単ですか?
iphone - NSRunLoop と GCD キュー
私は iOS で使用するための C++ ライブラリを作成しています (はい、残念ながら C++ でなければなりません)。AVCaptureSession を使用して、captureOutput コールバックを介して配信されるビデオ フレームをキャプチャします。C++ ライブラリは私の成果物です。テスト/デモ用のココアタッチアプリケーションがあります。したがって、次のようになります。
(テストアプリ) <-----> (c++ lib(AVFoundation コールバック))
テスト アプリには UI コントロールがあり、ほぼすべてのグラフィックを担当します。C++ ライブラリは、フレームを OpenGL 経由で UIView にレンダリングします。
私と一緒にいますか?良い
さて、まず、ユーザーは私のライブラリを呼び出す UIButton を押します。この呼び出しが完了するまでに 10 秒以上かかります。したがって、ボタン クリックの直後に呼び出しを配置すると、ライブラリ関数が戻るまで UI がブロックされます。
これはダメです。次に試したのは、スレッドを生成して lib を呼び出すことでした。
これにより UI がブロックされることはなくなりましたが、ビデオ フレームのコールバック関数が起動することはなくなりました (AVCaptureSession の captureOutput)。メインの NSRunLoop がブロックされているようです。
次に、同じことを試しましたが、Grand Central Dispatch を使用しました。
これは同じ動作をします。つまり、ビデオ フレームのコールバックは発生しません。ラメ
2 番目と 3 番目のケースでメインの NSRunLoop がブロックされるのはなぜですか? キューを関連付ける方法はありますか?
これは理にかなっていますか?