3

Matlab タイマー オブジェクトを使用して、一定の間隔 (1800 秒ごと) でいくつかのログ ファイルをローテーションします。

rotateTimer = timer( ...
    'Name', 'Log Rotator', ...
    'Period', 1800, ...
    'StartDelay', 1800, ...
    'ExecutionMode', 'fixedSpacing', ...
    'TimerFcn', {@RotateLogs});
start(rotateTimer);

この方法は自動ローテーションには非常に適していますが、ユーザーがログ ファイルを手動でローテーションできるようにする必要があります。

手動回転が発生すると、次の自動回転が 1800 秒後に発生するようにします。これには、タイマー オブジェクトを「リセット」して、手動回転の瞬間に 0 からカウントアップを開始する必要があります。

タイマーをゼロにする呼び出し可能なプロパティまたはメソッドが見つかりません。タイマーを開始および停止しても、タイマーはリセットされず、元の場所から数え続けます。どうすればこれを達成できますか?

4

3 に答える 3

0

たぶん私はあなたが言っていることを誤解しているだけかもしれませんが、「set」コマンドを使用してタイマーを0にすることはできませんか?

コマンド ウィンドウ経由:

help timer
...
Getting and setting parameters:
    get              - Get value of timer object property.
    set              - Set value of timer object property.

手動ローテーションが発生したら、タイマーを 0 に戻します。

于 2013-04-11T20:08:36.737 に答える
0

意図したように、タイマー オブジェクトを「リセット」しても、この問題を解決することはできませんでした。

うまくいく解決策:

  • ログが有効になると、固定間隔 (0.5 秒) でトリガーされる繰り返しタイマー オブジェクトがあります。
  • ロギングが最初に有効になったときに、呼び出しtic()てその結果を保存します。
  • タイマーのコールバック関数内で、toc()ロギングが開始されてからの経過時間を確認するために呼び出します。経過時間がローテーションしきい値を超えた場合、ログ ローテーションを実行します。ログ ローテーションはtic()、ローテーションからの時間を 0 に「リセット」するために呼び出します。
  • ユーザーが手動でログをtic()ローテーションすると、ローテーションからの時間を 0 に「リセット」してログ ローテーションを実行するように呼び出します。

これは私の目的には十分に機能します。ログ ローテーション間のタイミング ジッターは約 1 秒ですが、これは許容範囲内です。必要に応じて、タイマー オブジェクトの期間を短くしてジッターを減らすことができます。

于 2013-04-18T18:10:18.477 に答える