Windowsサービスでn分ごとに関数を実行する必要があります。終了したら、もう一度やり直してください。関数が開始されていれば、終了するまで再開できません。当初、私はこのアイデアを持っていた:Cでタイマを実装する別の方法#
void function()
{
while(true)
{
if(!is_running)
{
function_to_be_repeated();
is_running = false;
}
else
{
Thread.Sleep(some_time); // wait to start again
}
}
}
は、その後、私は、このhttp://www.albahari.com/threading/part3.aspxが見つかりました:
bool running = false;
static void Main()
{
// First interval = 5000ms; subsequent intervals = 1000ms
Timer tmr = new Timer (function_to_be_repeated, "...", 5000, 1000);
Console.ReadLine();
tmr.Dispose(); // This both stops the timer and cleans up.
}
static void function_to_be_repeated(object data)
{
if(!running)
{
running = true;
// do some stuff...
running = false;
}
}
をしかし、私は
をEnterキーを押したときにそれが停止し、より良い、それを実装するための別の方法はありますか?
「しかし、Enterキーを押すと停止します」 - はい、これはコードの動作です。今質問がありましたか? –
'Thread.Sleep'を使うのではなく、タイマーに' AutoResetEvent'を使う傾向があり、かなりうまくいきました。それが示唆された解決策であろうとなかろうと、私は言うことができませんが、それは私にとってより軽い解決策のようなものを提供します。 –
.NETには、(異なる名前空間にある) 'Timer'という名前のクラスがあります。あなたはどちらを使っていますか? –