問題タブ [dispatch-async]

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 投票する
6 に答える
145290 参照

ios - iPhone-GrandCentralDispatchメインスレッド

私は自分のアプリで成功を収めてグランドセントラルディスパッチを使用してきましたが、次のようなものを使用することの本当の利点は何であるか疑問に思いました。

あるいは

つまり、どちらの場合も、アプリが実行されている場所でメインスレッドで実行されるブロックを起動しているため、負荷を軽減することはできません。最初のケースでは、ブロックがいつ実行されるかを制御できません。ブロックを発射してから0.5秒後にブロックが実行されるケースを見てきました。2番目のケースは、

右?

どう思いますか?

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

objective-c - dispatch_get_main_queue()を使用することは、私のコードがメインスレッドにあることを意味しますか?

次のコードはメインスレッドで実行されますか?「メインキュー」はメインスレッドを指しますか?

0 投票する
0 に答える
601 参照

multithreading - dispatch_async がブロックの実行を終了したかどうかを確認する方法

dispatch_async について質問があります。ブロックが完了したときにのみ取得される値を返す必要があるため、キューの実行が終了したことを確認したい。

現在、return 関数が呼び出されたときに、dispatch_async(dispatch_get_main_queue(), ^{..} がまだ実行されていないため、戻り値は nil になります。return が呼び出される前に、これが確実に行われるようにするにはどうすればよいですか?

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

dispatch-async - シリアルキューへのdispatch_asyncブロックは順序を保ちますか?

dispatch_async によって 2 つのブロックをシリアル キューに送信すると、最初のブロックの後に 2 番目のブロックが実行されることが保証されますか。

  • dispatch_async(serial_queue, b1);
  • dispatch_async(serial_queue, b2);

b1 が b2 の前に実行されることを保証できますか?

以下は、完全なソース コード セクションです。

m_value == COUNTER を常に保証できますか? ありがとう

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

ios - IOS の dispatch_async ビューが表示されなくなります

私は、dispatch_async とブロックを使用して、3 秒ごとにサーバー データを取得しています。ビューが消えるか、ユーザーがプログラムをシャットダウンする方法は何ですか?

非同期ブロックが時々チェックするのはブール値のフラグでしょうか? その場合、非同期ブロックがスリープしている間にビューが終了するとどうなりますか?

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

testing - dispatch_async などのコードの単体テスト。

次のコードの単体テストを行う必要があります。dispatch_async は、アプリのロジック シーケンスによってコードが実行されないことを意味します。タイムリーに実行する方法について何か考えはありますか?

ありがとうございました。

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

iphone - dispatch_async 内で UIProgressView を更新する

アプリでdispatch_asyncを使用してGoogle API呼び出しを行い、解析しているJSON結果を取得しています。解析した JSON 応答からの結果の数に応じて更新されるように、進行状況ビューを実装したいと考えています。

したがって、私のdispatch_async Google API呼び出しは次のとおりです。

私のfetchResultsForGoogle: withObject:メソッドは結果を解析し、処理された結果の数とともに進行状況ビューを画面に表示したいと考えています。したがって、fetchResultsForGoogle...メソッド内で、次のものが必要です。

しかし、dispatch_async が別のスレッドで実行されている場合、を使用せずにメイン スレッドのビューを更新できないことを理解していると思いますdispatch_async(dispatch_get_main_queue()。これを解決するために、これを実装する 2 つの方法 (以下を参照) を試しましたが、どちらの方法もうまくいきません (progressViewまったくprogressViewLabel更新されません)。

プランA:

次の手段:

そしてfetchResultsForGoogle...メソッド内:

したがって、これを実装する正しい方法に関するアイデアやヒントは大歓迎です!

EDIT-SOLVED IT 修正しました。ブロックではdispatch_async、 に渡していましたperformSelectorOnMainThread。そのため、 で進行状況ビューを更新しようとしたときに完了performSelectorOnMainThreadするまで UI が更新されませんdispatch_async

そのため、ブロックperformSelectorInBackgroundThread内に変更したところ、UI が適切に更新されるようになりました。dispatch_asyncperformSelectorOnMainThread

私はこれらすべてに慣れていませんが、まだ新しいことを学んでいることをうれしく思います。

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

ios - iOSの別のスレッドからコントローラーメソッドを呼び出す

別のスレッドで実行されている音楽レンダリング関数からこのメソッドを呼び出そうとしています。メソッドは内部にありInstrumentGridViewControllerます。

これが私がメソッドを呼び出す方法です:

しかし、私はこの警告を受けています:

そして、私が実行しようとすると:

私はその方法がそこにあると確信しているので、なぜこれが起こっているのか本当にわかりません。

編集:H2CO3は、現在実行中のインスタンスでstopPlaybackメソッドを呼び出す必要があると述べました。どうすればそれができるのでしょうか?

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

multithreading - バックグラウンドスレッドでdispatch_asyncが機能しない

データベースからロードして画面に表示する重いコンテンツがあります。しかし同時に、「データベースへの plist」保存のバックグラウンド タスクが進行中です。したがって、UI がスタックします。

私が以下のように使用しているコード、

データベースのフェッチと UI の更新メソッドの場合

そして、「Plist to DB」メソッドを次のように呼び出しています

これtaskBlockは重い DB フェッチでcompletionBlockあり、UI の更新です。

しばらくして(メソッドが完了した後)このメソッドを呼び出すと、syncDataスムーズに更新されます。しかし、まだ完了していない場合、UI が動かなくなります。

スレッドのデッドロックの問題のようですが、これについては明確ではありません

助けてください !!

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

ios - MKOverlay は、非同期呼び出しからの表示に時間がかかります

MKMapView と MKPolyline を使用してルート形状を表示しています。注釈が MKMapView に配置され、そこに別の注釈が既に存在する場合、ルート プロバイダーにルーティング コールを非同期的にディスパッチし、成形されたオーバーレイを追加します。

これが問題です。リクエストにメイン スレッドを使用すると、リクエストの進行中に MKAnnotation ドロップがフリーズしますが、戻るとオーバーレイが適切に表示されます。代わりにリクエストを非同期キューにディスパッチすると、アノテーション ドロップがフリーズせず、非同期呼び出しが完了するとオーバーレイが追加されますが、MapView がそれを認識して実際にオーバーレイを描画するにはしばらく時間がかかります。20秒くらいかかる時もあります。これがコードです。

実際のルート計算は次のとおりです。

上記のコードを取得して async ディレクティブをコメント アウトすると、処理に同じ時間がかかり、迷惑なフリーズが発生しますが、オーバーレイはすぐに描画されます。

MKMapView が非同期で行われたときにオーバーレイを描画する必要があることに気付くのに時間がかかる理由は何ですか?

ありがとうアウレリオ