2016-06-29 12 views
0
bool elapsed = false; 

private void timerElapsed(object sender, System.Timers.ElapsedEventArgs e)     
{ 
    elapsed = true; 
} 

private void WorkerThreadFunction() 
{ 
    Timer _timer = new System.Timers.Timer(60000); 
    _timer.Elapsed += timerElapsed; 
    _timer.AutoReset = false; 

    while (!elapsed) 
    { 
     // Do something... 
     Thread.Sleep(50); 
    } 
} 

グローバル変数「経過」はどのように反応しますか?より多くの別々のWorkerThreadをタイマーで実行することは可能ですか?異なるスレッドで同時にタイマーを増やす

+1

内からグローバル変数にアクセスする必要がないのであれば、あなたは実際にもちょうど、ストップウォッチを使うだろうか?別々のWorkerThreadsの問題はどこにありますか?もちろん、あなたは複数を持つことができます。 – JeffRSon

+0

はい、ただし、timerElapsedによってブール変数がtrueに設定されている場合はどうなりますか?他のWorkerThreadsはどのように反応しますか?そこにはまだ「偽」ですか? – xileb0

+1

もちろんです。すべてのスレッドに独自の「経過」があることを確認する必要があります。さらに、「揮発性」について読む。 – JeffRSon

答えて

0

もちろん、もっと別のWorkerThreadを実行することは可能です。各自が自分のタイマーを持っています。問題はないはずです。

変数bool elapsedは、ジョブを終了する最初のThreadによってtrueに設定され、他のプロセスがfalseに設定するまではtrueのままです。

あなたのスレッドジョブがカプセル化されているようです:あなたが不運であれば最初にあなたのelapsed

trueするには、[編集]を設定しているため、いくつかのスレッドでもそのジョブを開始しない場合があります。 あなたは「反応」とはどういう意味ですかスレッド

private void WorkerThreadFunction() 
{ 
    System.Diagnostics.Stopwatch watch = new System.Diagnostics.Stopwatch(); 
    watch.Start(); 

    while(watch.ElapsedMilliseconds < 60000) 
    { 
     // Do something... 
     Thread.Sleep(50); 
    } 

    watch.Stop(); 
} 
+0

しかし、私は、他のスレッドが独自の "経過"変数を持っていることを望みます。どうやってやるの? – xileb0

+0

グローバル変数 –

+0

を使用しないでください。したがって、Workerthreadで経過変数を宣言してから、それをtimerElapsedイベントに渡す必要がありますか? – xileb0

関連する問題