バックグラウンドスレッドでネットワークの処理をしていて、バックグラウンドメソッドのいくつかが 'performSelectorOnMainThread'コールを行うと、これらの呼び出しは現在のコードブロック(メインスレッドで実行中)の実行を中断しますか?PerformSelectorOnMainThreadは現在のコードブロックを中断しますか?
0
A
答えて
1
いいえ、そうすることはできません。 performSelector
のメソッドグループは、実行ループのアクションをスケジュールします。現在のコードブロックが実行ループに戻ると、これらのアクションが実行されます。 ( "現在のコードブロック"とすると、あなたのコードがメインスレッド上で実行されていることを意味します)
1
waitUntilDone
がYES
に設定されている場合は、絶対にperformSelectorOnMainThread
を呼び出すコードの実行を中断します。 NO
に設定されている場合、セレクタはメインスレッドで実行されるようにキューに入れられます。
performSelectorOnMainThread
の呼び出し元がメインスレッドでない場合、「現在のコードブロック」が終了する前にセレクタが実行されるかどうかは、CPUの状態に完全に依存します。複数のCPUが存在する可能性があります。 2つのスレッドが同時にスケジュールされている場合や、あるOSが現在のスレッドではなくメインスレッドのスケジュールを決めている可能性があります。
基本的に、これらの呼び出しは、マルチスレッドプログラミングから慣れているのと同じように、現在のコードブロックの実行を中断することがあります。
[「現在のコードブロック」と私はあなたがの発信者を意味想定していますperformSelectorOnMainThread
]
更新:
ああ、右、あなたはそれが現在実行されているコードを中断することができます」を意味しますメインスレッドで? "それに対する答えは間違いありません。メインスレッドの実行ループで、ループの次回実行時にスケジュールされます。
関連する問題
- 1. 現在のテールを中断して新しいものを開始する
- 2. 現在の通話を中断して新しいものを開始しますか?
- 3. TTPhotoViewControllerは現在の中心画像を取得しますか?
- 4. QNetworkAccessManagerデストラクタは現在のリクエストを中止しますか?
- 5. ResolveHostNameAsyncはトゥームブースティングを中断しますか?
- 6. 現在実行中のブラウザの現在のWebアプリケーションを検出します。
- 7. 現在実行中のアクティビティのインスタンスを取得しますか?
- 8. 現在の接続を切断せずにpostgreSQLを再ロードしますか?
- 9. 現在のパッケージをインポート中
- 10. 現在のタグクラスを現在のページに適用しますか?
- 11. Atlassian Bambooは、現在実行中/実行中のビルドを停止します。
- 12. iOS:UIAlertを表示すると、現在表示されているモーダルビューコントローラを中断できますか?
- 13. Immutablejs Map.updateはユニットテストを中断します
- 14. TypeScript v2.3.1はユニットテストを中断します
- 15. NiFi SpringContextProcessorはフローを中断します
- 16. 現在再生中のビデオファイルの現在のフレームを取得する方法は?
- 17. タッチ中の現在のビューコントローラー
- 18. C#は、中括弧なしのコードブロックをサポートしていますか?
- 19. Java:forループは、現在のスレッドの中断後でも1回実行されます
- 20. Javaスキャナが入力を中断するのを中断しました
- 21. 現在のループから切断するループ制御
- 22. Java、スレッドを中断(中断)
- 23. performSelectorOnMainThreadのブロックバージョン:withObject:waitUntilDone:
- 24. 私の機能の中でこのコードブロックは何をしていますか?
- 25. Pythonは本の中で、現在のファイル
- 26. Pythonのthreading.Condition.wait()はすぐに実行を中断しますか?
- 27. テスト中に現在の日付をシミュレートします
- 28. 現在実行中のコンソールアプリケーションでメソッドを呼び出します。
- 29. ui-gridカスタムソートアルゴリズムの中から現在の列(フィールド)名を取得しますか?
- 30. performSelectorOnMainThreadのwithObject引数にネイティブポインタを渡しますか?
これは間違っています。これらの呼び出しは、メインスレッド上で実行中の現在のコードブロックの実行を中断することはできません。 – mvds
しかし、呼び出し元が別のスレッドで実行されている場合は... – mattjgalloway
申し訳ありませんが、現在のコードブロックがメインスレッドで実行されていることを反映するために質問を編集しました。 –