确保一个线程只用一秒钟的最佳方法是什么?

时间:2015-08-14 15:23:55

标签: c# multithreading

考虑到这是我的代码:

    public void alarmClockTick()
    {
        while(true){

            foreach(Alarm alarm in objectCollection){

                //Do some actions

            }

            Thread.Sleep(1000);
        }
    }

如果我们假设for循环执行一些可能需要几毫秒的动作,我怎样才能确保线程循环在1秒后循环?我目前正在制作一个闹钟,我希望能够精确地处理这部分代码。

我考虑过测量循环所需的时间,然后计算我们需要等待的时间,但是,时间测量还需要一些时间吗?

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

我采取了疯狂的猜测,并假设你想要做的更像是这样的事情。该代码可以很容易地用于“闹钟功能”

创建一个Windows窗体并添加一个名为button1的Button和一个名为label1的标签

public partial class Form1 : Form
{
    private Timer _timer;

    public Form1()
    {
        InitializeComponent();

    }

    protected override void OnLoad(EventArgs e)
    {
        base.OnLoad(e);
        _timer = new Timer();
        _timer.Interval = 10;
        _timer.Tick += _updateLabel();

    }

    private void _updateLabel()
    {
        label1.Text = (DateTime.Now - _start).ToString();
    }

    DateTime _start;
    private void button1_Click(object sender, EventArgs e)
    {
        if (!_timer.Enabled)
        {
            _start = DateTime.Now;
            _timer.Start();
        }
        else _timer.Stop();
        _updateLabel();
    }
}