1

2つのタイマーを作成する必要があります。1つはUIスレッドにあり、もう1つはバックグラウンドスレッドにあります。これらのタイマーは互いに独立しています。

私が使用するシナリオ。基本的に、UIスレッドの応答性をテストするためにこれが必要です。uIスレッドのタイマーは、UIスレッドの200ミリ秒ごとにlastUpdatedDatetimeプロパティを更新します。このlastupdatedDatetimeプロパティを200ミリ秒ごとにポーリングするバックグラウンドスレッドもあります。

誰かが私がこれを達成する方法を知っていますか?

4

2 に答える 2

1

NSTimer のポイントは、実行ループで他のイベントを処理している間に、スレッド (通常はメイン スレッド) で実行されるようにスケジュールできることです。バックグラウンド スレッドで 200 ミリ秒ごとに何かをポーリングするだけの場合は、NSTimer を使用せずにバックグラウンド スレッドをスリープ状態にする方がはるかに簡単です。したがって、メインスレッドで通常どおり NSTimer をセットアップし、バックグラウンドスレッドで次のようにします。

while (stillRunning) {
    usleep(200*1000);
    // Do something with lastUpdatedDatetime
}

この手法はスレッドを浪費しますが、Grand Central Dispatch を使用するよりも、テスト目的ではおそらくより決定論的です。

lastUpdatedDatetime が NSDate である場合は、アトミック プロパティとして設定する必要があることに注意してください。これにより、バックグラウンド スレッドでアクセスしたときに有効なオブジェクトを確実に受け取ることができます。

于 2012-07-16T22:47:44.560 に答える
0

dispatch_async と dispatch_after を調べる

dispatch_async を使用すると、別のスレッドへの呼び出しを開始できます。これは、私がメイン スレッドの変更を行うために使用するものです。

dispatch_after を使用すると、dispatch_async を数秒間遅らせることができます。

これら 2 つを組み合わせると、スレッド間を行き来できます。

ここにGrand Central Dispatchのドキュメントがあります

于 2012-07-16T22:39:04.040 に答える