問題タブ [system.timers.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.

0 投票する
1 に答える
149 参照

c# - C#system.timers.timerの奇妙な動作

Bully Coordinator 選挙アルゴリズムを実装しようとしています。このアルゴリズムでは、コーディネーターは 10 秒ごとにアライブ メッセージを送信し、すべてのプロセスはアライブを受信するまで少なくとも 14 秒間待機します。その時間内にメッセージを受信しない場合、デッド コーディネーターの選出が開始されます。

問題は、AliveTimer (Timer3_Count) が指数関数的に増加しており、アクティブなプロセスもそれに影響を与えていることです。どうして変な動きをするのかわからない。

最初のコーディネーターが Alive メッセージを送信している場合、カウンターは完全に機能しますが、コーディネーターが選出されなくなった後、奇妙な動作をします。

経過した関数はここにあります。プログラムに何か問題があると思います。すべてを試しました。

そして死んだコーディネーター選挙コードはここにあります

完全なコードはここで見つけることができます Bully Algorithm

注:各プロセスからメッセージをブロードキャストするためだけにパッシブサーバーを使用しています

0 投票する
1 に答える
650 参照

c# - C#ウィンドウサービスがタイマー機能を呼び出さない

私の Window Service アプリケーションでは、タイマー関数が呼び出されることはありません。サービスを自分のマシンにデプロイし、別の関数にブレークポイントを設定してサービスを Visual Studio にアタッチしました。OnStart()私の関数が呼び出されなかった 後。

これが私のOnStart()機能です

2017 年 9 月 12 日更新 : try と catch にイベント ログを追加しました。 この関数は次を呼び出しますtimer1_tick()

timer1_tick呼び出されません。助言がありますか?

2017 年 12 月 9 日更新: イベント ログを確認しました。[Windows ログ] > [アプリケーション] の下に、「サービスが正常に開始されました」というメッセージが表示されます。ただし、try-catch ブロックに追加されたイベント ログは表示されません。何かが足りないかどうかわかりません。

デバッグのために、サービスを Visual Studio にアタッチしました。下の画像では、OnStart()メソッドが呼び出されています。関数Thread.Sleep(30000)をスキップしないように、プロセスをデバッガーにアタッチするためのバッファー時間を確保するために、を追加しましたOnStart()

ここに画像の説明を入力

タイマーの開始後、TimerTick() 関数にブレークポイントがあり、ヒットすることを期待していますが、決してヒットしません。

ここに画像の説明を入力

0 投票する
1 に答える
668 参照

c# - System.Timers.Timerの停止/開始タイマーとSynchronizingObjectとロックのどちらを使用しますか?

トップノート:コメントごとに、このメモですべてが機能していると推測できます。実際、私のアプリケーションでは、それらを組み合わせようとしています。ちなみに、反対票を投じる前に、詳細を尋ねることができます。

トップノート 2: ところで、SO は MSO の反対票やクローズ票とは異なり、質問の削除を奨励するため、そうしません。そうしないと、すべての貴重なコメントと回答が削除されます。ここは助け合い、お互いを理解しようとする場所です

これは、linqpad コードの 4 つの異なる実装のうち最も基本的なものです。最初を除いて、他のすべてが望ましい出力を提供します。

詳細を説明していただけますか?

アプリケーションに多くのタイマーがあるため、完全なコードで管理および同期する必要があります。

SynchronizingObject もタイマー停止/開始もロックもなし

与えます:

4 5 6 7 8 9 11 12 13 14 15 15 15 17 18 20 21 22


SynchronizingObject の場合:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20


タイマー付 スタート/ストップ

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20


最後にロック付き

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

シンクロナイザーは次のようになります。

0 投票する
2 に答える
367 参照

c# - データベーステーブルに保存された、異なる間隔時間で異なる API を呼び出す

データベーステーブルに保存された別のクライアントからの API のリストがあり、すべての API が呼び出される API の時間間隔が異なります。APIを呼び出すための私のアプローチはどうあるべきですか。API テーブルのリストに新しいデータが追加される場合があります。動的タイマーを使用する必要がありますか?

  1. クライアントが新しいレコードを追加するために使用するアプリケーション (GUI) があります。
  2. これらのレコードは、API URL と、その API が呼び出される時刻 (スケジュール) を表します。
  3. あなたの課題は、クライアントが指定したすべての API を指定されたスケジュール/時間に呼び出すことができるコードを作成することです。