1

本当に基本的なことを行うための参照が見つかりません。メインの UI ループで「forever」というメソッドが必要です。UI のリフレッシュ レートと同期してメソッドを呼び出す方法と、50 ~ 100 ミリ秒ごとに頻繁に実行する必要がないため、カスタムの時間粒度を渡す方法の両方に満足しています。C++ (Carbon) と Objective C の両方の答えは問題ありませんが、最終的には純粋な C++ アプリケーションで使用します。このタイマーを削除する方法も提案できれば、それは素晴らしいことです。

これを使用したいスレッド化シナリオの詳細については、コメントを確認してください。

何かのようなもの

class MySyncedClass {
void start() {
    // start calling "execute" member function on main loop every N ms
}

void stop() {
   // stop calling "execute"
}

void execute() {
    // do something
}

};
4

2 に答える 2

2

通常、didFinishLaunchingWithOptions メソッドのアプリケーション デリゲートでこのようなことを行います。ivar を使用して NSTimer の現在のインスタンスを保存すると、いつでも停止できます。

@implementation AppDelegate {
    NSTimer *_timer;
}

- (void) start {
    _timer = [NSTimer scheduledTimerWithTimeInterval:0.2 target:self selector:@selector(execute) userInfo:nil repeats:YES];
}

- (void) stop {
    //reset timer
    if (_timer != nil) {
        [_timer invalidate];
        _timer = nil;
    }
}

- (void) execute {
    //do something
}

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
     [self start];
  }

ただし、別のスレッドのステータスのみを確認したい場合は、ブロック経由でコールバックを使用する必要があります。

別のスレッドからメイン スレッドで何かを実行したい場合は、dispatch_get_main_queue を使用できます。

dispatch_async(dispatch_get_main_queue(), ^{
             //do something
         });
于 2013-05-27T16:19:50.557 に答える