問題タブ [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.
iphone - iphone - Grand Central Dispatch のセカンダリ スレッドで usleep を使用してもよろしいですか?
Grand Central Dispatch を使用して、(メイン キューではなく) キューにブロックを追加しています。このブロックにはループがあり、ループを通過するたびに 0.02 秒のわずかな遅延が必要です。私は使っている
このキューに。これはメイン キューではないため、メイン スレッドをブロックしません。
問題は、Xcode が文句を言うことです:警告: 関数 'usleep' の暗黙の宣言
それを行う他の方法はありますか?
ありがとう。
objective-c - iPhone:dispatch_afterを使用してNSTimerを模倣する
ブロックについてはよくわかりません。NSTimer
との繰り返しをどのように模倣しdispatch_after()
ますか?私の問題は、アプリがバックグラウンドに移動したときにタイマーを「一時停止」したいのですが、サブクラス化NSTimer
が機能していないようです。
うまくいくように見えるものを試してみました。そのパフォーマンスへの影響や、大幅に最適化できるかどうかは判断できません。どんな入力でも大歓迎です。
iphone - DISPATCH_SOURCE_TYPE_TIMER が起動しない
作成時間から 45 秒後に起動するように構成されたグローバル キューでタイマーを作成していますが、何らかの理由でまったく起動していないようです。今すぐ火に変更しても何も起こりません。
残りのアプリは多くのことを行っているため、おそらく何かがタイマーの起動を妨げている可能性があります。
タイマーの作成方法は次のとおりです。
1) 起動しない理由をデバッグ/把握するための良い方法は何ですか? そうでない場合は、
2) 特定の時点でキューで実行するようにスケジュールされているすべての特定のタスクを一覧表示する方法はありますか?
アプリによって実行される作業の一部はシミュレーターで起動できないため、テスト デバイス自体でデバッグする必要があります。
iphone - 別のキューで作成されたときにmain_queueからのディスパッチタイマーを一時停止する
実行するようにスケジュールされているもの以外のキューからGCDタイマーを一時停止できますか?
優先度の低いglobal_queueに作成されたタイマーがあり、タイマーが起動すると、main_queueを介してUI作業を操作します。UIの一部の状態では、タイマーを一時停止する必要があります。サスペンドを実行するには、main_queueから優先度の低いキューに戻す必要がありますか?
macos - Grand Central Dispatchはいくつのスレッドを作成する必要がありますか?
GCDは、CPUを最大限に活用するために必要な数のスレッドのみを作成することを理解しています。約30のバックグラウンドタスクを起動するために使用するコードdispatch_async
では、ActivityMonitorでスレッドの数が約30増加しているのがわかります。デュアルコアPCしかないので、私はそれを予期していなかったでしょう。
私は何かを誤解していると確信しています。誰かが何が起こっているのか教えてもらえますか?
iphone - いつdispatch_release()しますか?
私はGCDにかなり慣れておらず、これに対する答えを見つけようとしていました。私が次のコードを持っていると仮定します:
コードのどこでキューを解放する必要がありますか?ブロックの内側または外側?
iphone - iPhone-GCDはキューが一時停止されているかどうかを確認します
一時停止されたディスパッチを再開するために使用する必要がありますdispatch_resume(...);
が、ディスパッチを再開するメソッドはアプリのいくつかの部分によって呼び出される可能性があるため、再開するように呼び出す前に、ディスパッチが一時停止されているかどうかを知る必要があります(ドキュメントには、ディスパッチの再開/一時停止のバランスを取り、一時停止よりも多くの再開を行うことはできません。そうしないと、「負の一時停止カウンター」で終了します。
ディスパッチが一時停止されているかどうかをテストする方法はありますか?
iphone - MPMovieDurationAvailableNotificationがMPMoviePlayerControllerの多くのインスタンスに対して1回だけディスパッチされるのはなぜですか?
ディスク上のムービーファイルを一覧表示するUITableViewがあります。セルの行ごとに、表示されている行ごとにワーカーインスタンスが割り当てられ、ムービーファイルのサムネイルを生成し、その行に表示する期間を取得するために使用されます。
ワーカークラスのMPMoviePlayerControllerのインスタンスごとに、ムービープレーヤーからのMPMovieDurationAvailableNotificationイベントをリッスンしています。何らかの理由で、このイベントは、ワーカーインスタンスの1つからのみディスパッチされているように見えます(または少なくともImはそれをキャッチすることしかできません)。これがinitとリスナーのコードです。インラインでいくつかのコメントがあります。
}
}
}
私は何が間違っているのですか?object:パラメーターをMPMoviePlayerControllerのインスタンスに設定すると、そのインスタンスのイベントのみを取得できるようになると考えました。ただし、Imは最後の通知のみをディスパッチしているようです。
iphone - iPhoneのカメラプレビュー「動画」にエフェクトをかける
私の目標は、次のようなカスタム カメラ ビュー コントローラーを作成することです。
- 背面カメラと、可能な場合は前面カメラの両方を使用して、4 つのインターフェースのすべての向きで写真を撮ることができます。
- プレビュー「ビデオ」とフル解像度の写真を適切に回転およびスケーリングします。
- プレビュー「ビデオ」とフル解像度の写真の両方に (単純な) 効果を適用できます。
実装 (iOS 4.2 / Xcode 3.2.5):
要件 (3) により、AVFoundation にドロップダウンする必要がありました。
Technical Q&A QA1702から始めて、次の変更を加えました。
- sessionPreset を AVCaptureSessionPresetPhoto に変更しました。
- セッションを開始する前に、追加の出力として AVCaptureStillImageOutput を追加しました。
私が抱えている問題は、プレビュー画像 (プレビュー「ビデオ」のフレーム) の処理のパフォーマンスにあります。
imageFromSampleBuffer:
まず、サンプル バッファの UIImage の結果を から取得しcaptureOutput:didOutputSampleBuffer:fromConnection:
ます。次に、CGGraphicsContext を使用して、画面に合わせて拡大縮小および回転します。
この時点で、フレーム レートは、セッションのビデオ出力で指定されている 15 FPS を既に下回っており、エフェクトを追加すると、10 未満または約 10 まで低下します。メモリ不足のため、すぐにアプリがクラッシュします。
iPhone 4 ではフレーム レートを 9 FPS に、iPod Touch (第 4 世代) では 8 FPS にフレーム レートを下げることに成功しました。
ディスパッチ キューを「フラッシュ」するためのコードもいくつか追加しましたが、実際にどれだけ役立つかはわかりません。基本的に、8 ~ 10 フレームごとに、フレームをcaptureOutput:didOutputSampleBuffer:fromConnection:
処理するのではなく、すぐに戻るように信号を送るフラグが設定されます。このフラグは、出力ディスパッチ キューでの同期操作が完了するとリセットされます。
現時点では、フレーム レートが低いことは気にしませんが、明らかに、メモリ クラッシュが少ない状態で出荷することはできません。この場合のメモリ不足の状態を防ぐためのアクションを実行する方法(および/またはディスパッチキューを「フラッシュ」するより良い方法)を知っている人はいますか?
objective-c - Objective-CおよびQuartzComposer; [qcViewpauseRendering]はBad_Accessを引き起こします
前もって感謝します。
Quartz Composerビュー(以下のqcView)があり、QCViewの中央に「ホーム」があることがわかるまで、画像(コードについて疑問がある場合は、アリの画像)をランダムな方向に移動します。アリが1インチずつ動くのを見るには、pauseRenderingが必要です。それがなければ、アリはその「家」に現れるでしょう。
これは、1匹のアリにとっては完全にうまく機能します。
方程式に別のアリを追加するときは、ディスパッチキューと2つのブロックを使用します。
このコードが実行されると、2人の叔母は同時に自宅に急いで行きます-私たちが探している正確な行動です。ただし、実行を停止して再度ビルドすると、[qcViewpauseRendering]メソッド内のどこかからすぐにExc_Bad_Accessを取得します。Clean&Buildの後、もう1回実行すると完全に機能します。pauseRenderingとresumeRenderingを削除すると、アリはすぐに自宅に現れます。
どうやら、QCView pauseRenderingメソッドにローカルな配列があり、それは絶えず拡大および縮小しており、単一のQCViewとそれにアクセスする複数のブロックを使用すると、問題の根本を確認できます。
QCViewのドキュメントを調べましたが、そこからインスピレーションを得られないようです。pauseRenderingに関するドキュメントは最小限です。誰もこれほどばかげたことを試したことはないと思いますが、誰かがQCViewを実際に変更した経験があり、私を正しい方向に向けることができることを願っています(エラー...「ANY!」を読んでください)。 。
[編集:「while(![qcView isPausedRendering])」のバリエーションを試しましたが、それが役立つ場合は。]