バックグラウンドスレッドでNSBlockOperationの直後にメインスレッドでブロックを実行する

ジョナサンH。

私のプロジェクトでは、以下を使用してバックグラウンドスレッドで操作を実行しますNSBlockOperation

var operationQueue = NSOperationQueue()
var iop = NSBlockOperation(block: { self.reloadSize() /*calculation...*/ })
operationQueue.addOperation(iop)

バックグラウンドスレッドでの計算が完了した直後table.reloadData()に、NSTableViewで:を呼び出す必要がありますまったく同じスレッドでそれを行いますが、自動レイアウトの問題のため、テーブルをメインスレッドに再ロードする必要があります。どうすれば両方のスレッド間でこの非同期関係を実現できますか?

ロブ

2つの可能なアプローチ:

  1. ブロック内からテーブルのリロードをディスパッチします。

    let operationQueue = NSOperationQueue()
    let operation = NSBlockOperation() {
        self.reloadSize()
        ...
        dispatch_async(dispatch_get_main_queue()) { // or you can use NSOperationQueue.mainQueue().addOperationWithBlock()
            self.table.reloadData()
        }
    }
    operationQueue.addOperation(operation)
    

    または単に使用しますaddOperationWithBlock

    let operationQueue = NSOperationQueue()
    operationQueue.addOperationWithBlock() {
        self.reloadSize()
        ...
        dispatch_async(dispatch_get_main_queue()) { // or you can use NSOperationQueue.mainQueue().addOperationWithBlock()
            self.table.reloadData()
        }
    }
    
  2. これに依存する新しい操作を作成します。

    let operationQueue = NSOperationQueue()
    
    let operation = NSBlockOperation() {
        self.reloadSize()
        ...
    }
    
    let completionOperation = NSBlockOperation() {
        self.table.reloadData()
    }
    
    completionOperation.addDependency(operation)
    
    operationQueue.addOperation(operation)
    NSOperationQueue.mainQueue().addOperation(completionOperation)
    

個人的には、私は一般的に最初のアプローチに傾倒しますが、後者のアプローチはより複雑なシナリオで役立つ可能性があります(たとえば、完了操作は他の多くの操作に依存しています)。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

バックグラウンドスレッドをブロックしながら、バックグラウンドスレッドのメインスレッドでコードを実行する

分類Dev

DispatchQueueの使用中にSwiftでメインスレッドから実行中のバックグラウンドスレッドの実行を停止する方法

分類Dev

x秒ごとにバックグラウンドスレッドでメソッドを実行する

分類Dev

Python:メインスレッドを継続的に実行し、他のスレッドをバックグラウンドで実行している

分類Dev

バックグラウンドスレッドでハンドラーメッセージを実行する

分類Dev

バックグラウンドでスレッドを実行し、OpenMPでメインを続行します

分類Dev

Swift 3でバックグラウンドスレッドを実行する

分類Dev

jsf Webサイトのバックグラウンドでスレッドを実行する方法は?

分類Dev

バックグラウンドスレッドからメインスレッドでUIViewを初期化する

分類Dev

別のブロックを実行する前に、すべてのバックグラウンドスレッドを実行します

分類Dev

SKPaymentQueueをバックグラウンドスレッドで実行するように強制する

分類Dev

バックグラウンドスレッドでAndroidネットワーク操作を実行する

分類Dev

Python、プロセスをバックグラウンドで実行し、メインスレッドからステータスを取得します

分類Dev

SwiftのバックグラウンドスレッドでUIKitを実行する

分類Dev

Androidでバックグラウンドスレッドを繰り返し実行する最良の方法は?

分類Dev

春のブートでバックグラウンドでスレッドを実行し、自動配線できるようにする

分類Dev

メインスレッドとバックグラウンドスレッドの間で配列を安全に共有する方法

分類Dev

バックグラウンドスレッドでのデータダウンロードの実行

分類Dev

バックグラウンドでサブプロセスを実行する

分類Dev

バックグラウンドスレッドiOSでプッシャーを実行する

分類Dev

バックグラウンドで実行するJavaでスレッドを作成する

分類Dev

非同期メソッドがシングルスレッドの場合、バックグラウンドでどのように実行できますか?

分類Dev

レイアウトエンジンへの変更は、迅速にメインスレッドからアクセスされた後、バックグラウンドスレッドから実行しないでください。

分類Dev

バックグラウンドスレッドでSQLクエリを正しく実行する方法は?

分類Dev

メインスレッドで実行される重要なタスクへの飢餓を回避するために、別のThreadPoolで特定のバックグラウンドタスクを実行します

分類Dev

スレッド化またはタスクキューなしでFlaskでバックグラウンドジョブを実行するには

分類Dev

バックグラウンドスレッドではなくメインスレッドで実行されているRXJavaObservable

分類Dev

C#バックグラウンドスレッドが終了した後にメソッドを実行する

分類Dev

RedirectToActionの後にバックグラウンドタスクを実行する

Related 関連記事

  1. 1

    バックグラウンドスレッドをブロックしながら、バックグラウンドスレッドのメインスレッドでコードを実行する

  2. 2

    DispatchQueueの使用中にSwiftでメインスレッドから実行中のバックグラウンドスレッドの実行を停止する方法

  3. 3

    x秒ごとにバックグラウンドスレッドでメソッドを実行する

  4. 4

    Python:メインスレッドを継続的に実行し、他のスレッドをバックグラウンドで実行している

  5. 5

    バックグラウンドスレッドでハンドラーメッセージを実行する

  6. 6

    バックグラウンドでスレッドを実行し、OpenMPでメインを続行します

  7. 7

    Swift 3でバックグラウンドスレッドを実行する

  8. 8

    jsf Webサイトのバックグラウンドでスレッドを実行する方法は?

  9. 9

    バックグラウンドスレッドからメインスレッドでUIViewを初期化する

  10. 10

    別のブロックを実行する前に、すべてのバックグラウンドスレッドを実行します

  11. 11

    SKPaymentQueueをバックグラウンドスレッドで実行するように強制する

  12. 12

    バックグラウンドスレッドでAndroidネットワーク操作を実行する

  13. 13

    Python、プロセスをバックグラウンドで実行し、メインスレッドからステータスを取得します

  14. 14

    SwiftのバックグラウンドスレッドでUIKitを実行する

  15. 15

    Androidでバックグラウンドスレッドを繰り返し実行する最良の方法は?

  16. 16

    春のブートでバックグラウンドでスレッドを実行し、自動配線できるようにする

  17. 17

    メインスレッドとバックグラウンドスレッドの間で配列を安全に共有する方法

  18. 18

    バックグラウンドスレッドでのデータダウンロードの実行

  19. 19

    バックグラウンドでサブプロセスを実行する

  20. 20

    バックグラウンドスレッドiOSでプッシャーを実行する

  21. 21

    バックグラウンドで実行するJavaでスレッドを作成する

  22. 22

    非同期メソッドがシングルスレッドの場合、バックグラウンドでどのように実行できますか?

  23. 23

    レイアウトエンジンへの変更は、迅速にメインスレッドからアクセスされた後、バックグラウンドスレッドから実行しないでください。

  24. 24

    バックグラウンドスレッドでSQLクエリを正しく実行する方法は?

  25. 25

    メインスレッドで実行される重要なタスクへの飢餓を回避するために、別のThreadPoolで特定のバックグラウンドタスクを実行します

  26. 26

    スレッド化またはタスクキューなしでFlaskでバックグラウンドジョブを実行するには

  27. 27

    バックグラウンドスレッドではなくメインスレッドで実行されているRXJavaObservable

  28. 28

    C#バックグラウンドスレッドが終了した後にメソッドを実行する

  29. 29

    RedirectToActionの後にバックグラウンドタスクを実行する

ホットタグ

アーカイブ