2

プログラムの実行中にifループ内の条件を継続的にテストするプログラムがあります。しかし、if条件が一定期間(たとえば5ms)trueまたはアクティブになり、次の10msの間if条件を非アクティブ化する必要があります。次に、ユーザーがプログラムを閉じるまで、このパターンを継続します。私はこれに近づく考えがありません、助けてください!

4

2 に答える 2

0

このようなことを試すことができます。

BOOL 結果 = NO;
BOOL prevResult = NO;

while(条件1)
{
    if(条件2)
        結果 = はい;
    そうしないと
        結果=いいえ;

    if(結果)
    {
        if(!prevResult)
            // 時刻を格納
        else if(/* 現在時刻 - 保存時刻 < 5ms */)
            // スレッドを 10ms スリープさせる
    }

    prevResult = 結果;
}

ミリ秒単位の精度を期待するのはおそらくあまり現実的ではないことに注意してください。

于 2012-06-01T06:00:46.390 に答える
-1

あなたに提案があります...

TRUE 値で処理を開始したい場合は、メソッドを作成し、このメソッドを呼び出します。

-(void)yourProcessMethod(BOOL _flag){

  if(_flag){
      //Execute your process 
      //now check for time is it 5ms or not
      if(time elapsed < 5ms){
          [self yourProcessMethod(TRUE)];
      }else{
          [self yourProcessMethod(FALSE)];
      }
  }else{
      //Execute your process (or do nothing if you want to stop it for 10 ms)
      //now check for time is it 10ms or not
      if(time elapsed < 10ms){
          [self yourProcessMethod(FALSE)];
      }else{
          [self yourProcessMethod(TRUE)];
      }

  }
}

編集:-

このコードを使用して、実行の経過時間を確認できます。

NSDate *start = [NSDate date];
// do stuff...
NSTimeInterval timeInterval = [start timeIntervalSinceNow];

timeIntervalstart と now の差をミリ秒未満の精度で秒単位で表したものです。

経過時間を計算します。

これがお役に立てば幸いです。:)はいの場合は、回答を受け入れるか、賛成票を投じることができます :)

于 2012-06-01T06:27:21.927 に答える