問題タブ [timer]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linux - Linuxはアプリケーションに単調に増加するクロックを提供しますか
Linux / Unix / Posixは、センチ秒からミリ秒の精度で単調に増加するクロックにアクセスするためのAPIをユーザースペースアプリケーションに提供しますか?
Linuxでは、/ proc / uptimeは、システムが稼働していた秒数の浮動小数点数の文字列ベースの表現を提供します。
gettimeofday(2)は、単調に増加するクロックを提供しません。
ITIMER_REAL時間領域でgetitimer(2)を使用し、タイマーを(プラットフォームに依存する)最大値で開始し、生成された信号を無視するように設定できますが、manページによると、タイマーを実行できる最長時間は約100日です。予想される実行時間よりも短いです。
windows - Windows は単調に増加するクロックをアプリケーションに提供しますか?
この質問は、 Does Linux provide a monotonically increase clock to applications に触発されています。
たぶん、もっと正確に言う必要があります。厳密に増加している時計関数を探しているため、2つの呼び出しがどれだけ速く続くかに関係なく、同じ値を返すことはありません。
embedded - 関数呼び出しの正確なタイミング
C51 コアのマイクロコントローラを使用しています。500 ミリ秒ごとに呼び出す必要がある、かなり時間のかかる大規模なサブルーチンがあります。RTOS は使用されていません。
私が今やっている方法は、10ミリ秒の既存のタイマー割り込みがあることです。メイン プログラム ループで真であることがチェックされる 50 回の割り込みごとにフラグを設定します。Flag が true の場合、サブルーチンが呼び出されます。問題は、プログラム ループがフラグを処理するまでに、すでに 500 ミリ秒を超えており、特定のコード パスの場合は 515 ミリ秒を超えることさえあります。所要時間は正確に予測できません。
明らかに、実行に時間がかかるため、タイマー割り込み内からサブルーチンを呼び出すことはできません。サブルーチンは、さまざまな条件に応じて 50ms から 89ms かかります。
サブルーチンが毎回正確に 500ms で呼び出されるようにする方法はありますか?
c - amd64でのdebianlinuxテストを使用したtimerfd_create
DebianLinuxlennyでtimerfd_createとtimerfd_settimeを使おうとしています。マンページには、が含まれていると書かれています<sys/timerfd.h>
。このファイルは私のシステムにありません。Debian Package Searchによると、timerfd.hを持つ唯一のパッケージはlinux-headers-*パケットです。
パケットlinux-headers-2.6.26-1-amd64とlinux-headers-2.6.26-1-commonをインストールしました。/lib/modules/2.6.26-1-amd64/build/include/linux/timerfd.hファイルを含めてみました(含めないでください<sys/timerfd.h>
)。しかし、次のリンカーエラーが発生します:
slave.c:(。text+ 0x166):slave.cへの未定義の参照timerfd_ceate
:(。text + 0x1e5):への未定義の参照timerfd_settime
私のビルドコマンドはgcc-oslave slave.c -L ../ libs -lcan-lutils-lrtでした
canおよびutilsライブラリは私自身のものです。それらのいずれも、timerfd_*関数の1つを使用または定義していません。-lrtを試したのは、manページにない場合でもtimer_createとtimer_settimerが必要だからです。timer_createとtimer_settimerを使用したテストプログラムは、問題なく、期待どおりに機能します。
インストールする必要のあるパケット、リンクする必要のあるライブラリ、およびtimerfd_createとtimerfd_settimerを使用するために必要なインクルードファイル。
ありがとうEdger
java - Javaでイベントの経過時間を計算するにはどうすればよいですか?
イベントの経過時間を計算できるように、Javaを使用してシステム時計にアクセスする簡単で簡単な方法は何ですか?
.net - System.Timers.Timer 使用時の非常に奇妙なバグ
何らかの奇妙な理由で、Elapsed イベントが 2 回発生しています。その直後、タイマーが機能しなくなります... コード構造は次のようなものです: 特定のオブジェクトは、500 ~ 1500 ミリ秒間隔で常に更新される値が X を超えて増加したときに、特定のイベントを発生させるように定義されています。前の値と比較した合計。
たとえば、X を 2 と定義し、受け取る値が 1,2,1,2,3,4,8 の場合、8 が入力されるとイベントが発生します。そのイベントのイベント ハンドラーは前述のタイマーを開始します。このタイマーは Y 時間実行されてから、問題のあるイベントを発生させます。タイマーが経過する前に値が正常に戻った場合、タイマーはリセットされます。
したがって、全体的な結果は、特定の動的な値を測定し、Y 秒以上発生する大きな X サイズの例外を監視するアプリケーションになるはずです。
コードの全体的な結果は次のようになります
実際の問題は、タイマーが経過すると RaiseAlert が 2 回発生し、タイマーが完全に機能しなくなったかのように発生し、まったく起動しないことです。完全なアプリケーションには多くのスレッド アクティビティが含まれており、一度に少なくとも 2 つのスレッドが実行され、vMonitor の値が更新されていることに言及する価値があると思います。
何かご意見は?
アップデート:
スレッドの問題については、正確な構造を説明するのはかなり複雑ですが、vMonitor オブジェクトは、監視された方法で、さまざまなスレッドによって絶えず変更される更新値を含む別のオブジェクトに含まれていると言えます。 . 親オブジェクトの値が更新されるたびに、vMonitor と比較され、適切なイベントが発生します。その後、vMonitor の値は親オブジェクトの値に置き換えられます。
編集: もう一度確認しました。vTimer.Elapsed デリゲートは、正しいイベント ハンドラーを 1 つだけ保持します。
c - Linux で推奨される方法で 1 ミリ秒の解像度タイマー
Linux で 1 ミリ秒の分解能のタイマー刻みが必要です。これは、さまざまなイベントをトリガーする必要があるかどうかを確認するために使用されるタイマー値をインクリメントするために使用されます。glibc 要件のため、POSIX timerfd_create はオプションではありません。timer_create と timer_settimer を試しましたが、それらから得られる最高の解像度は 10 ミリ秒で、小さい値はデフォルトで 10 ミリ秒の解像度になるようです。マンページによると、Getittimer と setitimer の分解能は 10 ミリ秒です。
現在考えられるこのタイマーを実行する唯一の方法は、メインループで clock_gettime を CLOCK_MONOTONIC とともに使用して、ミリ秒が経過したかどうかをテストし、経過した場合はカウンターを増やすことです (そして、さまざまなイベントが発生するかどうかを確認します)。
メインループで常にクエリを実行するよりも、これを行うためのより良い方法はありますか? これに対する推奨される解決策は何ですか?
私が使用している言語は普通の古い c です
更新
2.6.26 カーネルを使用しています。1kHzで中断できることは知っていますが、POSIX timer_*関数は最大1msまでプログラムできますが、信頼性がないようで、一部で新しいカーネルが必要になる可能性があるため、使用したくありませんシステム。一部の在庫カーネルには、まだ 100Hz が設定されているようです。そして、私はそれを検出する必要があります。アプリケーションは私のシステム以外で実行される可能性があります:)
対応しなければならないネットワーク イベントがある可能性があるため、1 ミリ秒もスリープできません。
解決方法 それほど重要ではないので、グローバル タイマーの分解能は 100 ミリ秒であると簡単に宣言しました。独自のタイマーを使用するすべてのイベントは、タイマーの有効期限を少なくとも 100 ミリ秒に設定する必要があります。もっと良い方法はないかと思っていたので質問させていただきました。
答えを受け入れた 理由 freespace からの答えは、リアルタイムの Linux システムなしでは実際には不可能である理由を最もよく説明していると思います。
multithreading - 「経過」イベント スレッドがまだ実行されているかどうかを教えてください。
System.Timers.Timer が与えられた場合、経過したイベント コードを実行しているワーカー スレッドがまだ実行されているかどうかをメイン スレッドから確認する方法はありますか?
つまり、タイマーまたはタイマーが実行されているメインのアプリ/サービス スレッドを停止する前に、ワーカー スレッドで実行されているコードが現在実行されていないことを確認するにはどうすればよいでしょうか?
これは、状態を使用してタイマーをスレッド化するためにタイマーを捨てることの問題ですか、それともスレッドを直接使用する時ですか?
c# - Windows サービスで使用するのに最適なタイマー
N 時間ごとに実行される Windows サービスを作成する必要があります。
問題は、
どのタイマー コントロールを使用すればよいSystem.Timers.Timer
か、またはSystem.Threading.Timer
1 つを使用するかということです。それは何かに影響を与えますか?
System.Timers.Timer
Windows サービスの動作が正しくないという証拠をたくさん聞いたので質問しています。
ありがとうございました。
iphone - TouchesEnded イベントに優先するタイマーおよびアニメーション イベント
TouchesBegan オーバーロードで最初に設定した NSTimer を使用して、タップ アンド ホールド ハンドラーを実装しました。
しかし、私が実際に望んでいるのは、タッチが保持されている間、アクションが連射で連続して実行されることです。そのため、タイマーの期限が切れると、ハンドラーを呼び出して作業を行います。これにより、別のタイマーが設定され、TouchesEnded が入ってキャンセルされるか、別の終了条件が満たされるまで、サイクルが続きます。
これは、ハンドラー コードが同時にアニメーションをトリガーするまでは正常に機能します。これで、アニメーション イベントとタイマー イベントがオフになり、TouchesEnded も処理する必要があります。
私が見つけたのは、アニメーションがトリガーされ、タイマーを0.025秒未満に設定した場合、タイマーサイクルが停止するまでTouchesEndedイベントが発生しないことです(他の終了条件)。より遅いタイマーを設定するか、アニメーションをトリガーしないと、動作します (TouchedEnded がすぐに表示されます) が、私が望むものではありません。
明らかに、これはすべてデバイス上にあります (リリース ビルド - NSLogs なし) - sim ではすべて正常に動作します
これらのイベントの相対的な優先度を設定する方法はありますか?それとも、ここで明らかな何かが欠けている可能性がありますか?
この例では、完了するまで視覚的なフィードバックなしで継続的な部分を実行することで、これを回避しました (このユーザーの観点からすると、これは瞬時です)。今のところこれでいいと思います。私はまだこれについてもっと考えを聞きたいと思っています (Jeffrey のアイデアは良かったです) が、今はテンターフックを待っているわけではありません.