問題タブ [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 投票する
1 に答える
251 参照

c++ - C++ ヘッダーから Objective-C++ 実装を構築することは可能ですか?

Objective-C++ で使用したい C++ フレームワークがあります。私は XCode4 で作業しており、iPad の展開をターゲットにしています。

したがって、次の (疑似コード) C++ ヘッダーが与えられます。

この特定の例では、doSomethingGrand Central Dispatch 経由で何かを発送する必要があります。

Objective-C++ で C++ ヘッダーを実装するための解決策を見つけるのに苦労しています。そうすることは可能ですか?もしそうなら、誰かが素晴らしい例を提供できますか?

ありがとう!

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

ios - iOS で dispatch_async を使用する場合のメモリ警告

30 fps で jpeg フレームをキャプチャし、ビデオを mp4 形式で記録するコードを以下に示します。processFrame メソッドを dispatch_async 呼び出しでラップして、記録プロセスがビデオ プレーヤーをロックアップしないようにしようとしています。これに関する問題は、メモリ警告レベル 2 が表示され、数秒後にアプリが最終的にクラッシュすることです。記録されたビデオ出力に各フレームを追加しようとすると、dispatch_async メソッドがキューをメモリにロードし、30fps では、フレームを処理して使用済みメモリを解放するのに十分な時間がないことがわかります。processFrame の実行を遅らせるために dispatch_after を使用しようとしましたが、役に立ちません。何か案は?これを別の方法で行う必要がありますか?

このメソッドは、毎秒約 30 回呼び出されます。

processFrame メソッド

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

concurrency - ディスパッチ_asyncを使用したEXC_BAD_ACCESS

Objective-C++の非同期ディスパッチキューを介してブロックを実行しようとしています。これが私がやろうとしていることのクラスフラグメントです...

dispatchEventToSubscribersメソッド内でEXC_BAD_ACCESSを取得します。の値を確認する_dudeと、XCodeは範囲外であると通知します。thisどういうわけか負けているとしか思えない。同時実行ドキュメントの確認:

ディスパッチキューを使用して非同期で実行する予定のブロックの場合、親関数またはメソッドからスカラー変数をキャプチャして、ブロックで使用するのが安全です。ただし、呼び出し元のコンテキストによって割り当ておよび削除される大きな構造体やその他のポインターベースの変数をキャプチャしようとしないでください。ブロックが実行されるまでに、そのポインタによって参照されているメモリがなくなっている可能性があります。もちろん、自分でメモリ(またはオブジェクト)を割り当て、そのメモリの所有権をブロックに明示的に渡すことは安全です。

thisでは、オブジェクトにメソッドを非同期的にディスパッチするにはどうすればよいですか?

ありがとう!

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

ios - GCDを使用した同時読み取り専用書き込みモデルの実装

Grand Central Dispatch(GCD)を使用して、リソースへのアクセスを制御する同時読み取り専用書き込みモデルを実装する適切な方法を理解しようとしています。

頻繁に読み取られ、たまに更新されるNSMutableDictionaryがあるとします。読み取りが常に辞書の一貫した状態で機能することを保証する適切な方法は何ですか?確かに、キューを使用して、ディクショナリへのすべての読み取りおよび書き込みアクセスをシリアル化できますが、それでは、ディクショナリへの同時アクセスを許可する必要がある読み取りが不必要にシリアル化されます。最初、ここでのグループの使用は有望に聞こえます。'read'グループを作成し、それにすべての読み取り操作を追加することができます。これにより、読み取りを同時に行うことができます。そして、更新を行うときが来たら、書き込み操作の一部としてdispatch_notify()またはdispatch_wait()を実行して、更新を続行する前にすべての読み取りが完了していることを確認できます。しかし、書き込み操作が完了するまで後続の読み取り操作が開始されないようにするにはどうすればよいですか?

上記の辞書の例を次に示します
。R1:0秒で、読み取りが完了し、5秒で完了します
。R2:2秒で、別の読み取りが完了し、5秒で完了します
。W1:4秒で、書き込み操作が実行されます。辞書に3秒間アクセスする必要があります
R3:6秒で別の読み取りが行われ、完了するまでに5秒かかります
W2:8秒で、別の書き込み操作が行われ、完了するまでに3秒かかります

理想的には、上記は次のように再生されます
。R1は0秒で始まり、5で終わります
R2は2秒で始まり、7で終わります
W1は7秒で始まり、10で終わります
R3は10秒で始まり、15で終わります
W2は15秒で始まります、18で終了

注:R3は6秒で到着しましたが、W1が早く到着したため、W1より前に開始することはできませんでした。

GCDで上記を実装するための最良の方法は何ですか?

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

objective-c - Has every NSThread automatically a dispatch queue?

Has every thread an associated dispatch queue by default? I'm just wondering if I could use dispatch_semaphores in every context, or if i need to wrap it in an explicit dispatch call with a defined queue.

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

iphone - ディスパッチ ソース タイマー イベントの生成時にメモリ リークが発生する

ディスパッチ キューを使用してタイマー イベントを生成しています。以下は、タスクを実行するコードです。

これは非常にうまく機能しますが、プロファイラーを実行すると、これらのメソッドから多くのメモリ リークが発生します。

  • dispatch_source_create
  • dispatch_source_set_timer
  • dispatch_source_set_event_handler

dispatch_release() メソッドを使用してタイマーが解放されることを確認しました。

上記のコードに誤りがある場合は、誰か教えていただけますか? また、タイマーイベント生成の例を指摘していただけると助かります。

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

c++ - ローカル変数宣言を使用したdispatch_applyは、C++メソッドの実装ではコンパイルされません

コード

「'intXXX::j'は'クラスの静的メンバーではありません」と言ってコンパイルしません。ブロックに関するドキュメントには、「ブロックの字句スコープ内で宣言されたローカル変数は、関数内のローカル変数とまったく同じように動作します。」と記載されています。ファイルの拡張子は.mmです。私は何か見落としてますか?

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

c - ディスパッチソースリーダー-ファイルの終わりを検出する方法は?

Appleのドキュメントに触発されて、私は従来NSInputStreamの実行ループベースのアプローチを使用する代わりに、GCDディスパッチソースを使用してファイルから非同期的に読み取ることを実験しています。

ただし、ファイルの読み取りが完了したことを検出する方法がわかりません。を使用NSInputStreamすると、代理人にNSStreamEventEndEncounteredイベントが送信されます。ディスパッチソースの場合、イベントハンドラーはファイルの終わりで呼び出されると想定しましたが、そうではないようです。私は何が欠けていますか?

これが私のコードです:

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

ios - グランド セントラル ディスパッチと NSThread

NSThread と Grand Central Dispatch (GCD) のテスト コードをいくつか作成しました。

そして結果:

NSThreads は期待どおりに動作します。タスクは同時に実行され、各スレッドは 1 秒間スリープします。

dispatch_apply が期待どおりに機能しません: 順序が連続しているのはなぜですか? 前のループが終了するまで各ループが待機するのはなぜですか?

助けてくれてありがとう。

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

objective-c - Objective C-質問をブロックしますか?

私は次の方法を持っています

ブロックを同期的に実行して、取得される前に結果が返されないようにするにはどうすればよいですか?