我具有由不同线程访问这个下面的代码片段。 (m_settings.Interval)的时间每个给定的间隔之后被称为不同线程共享的对象
try
{
this.RefreshSettings();
DateTime lastChecked = DateTime.Now.AddMilliseconds(-1 * m_Settings.Interval);
while (Run)
{
if ((DateTime.Now - lastChecked).TotalMilliseconds >= this.m_Settings.Interval)
{
lastChecked = DateTime.Now;
if (this.ShouldNotify())
{
object LockObj = new object();
lock (LockObj)
{
this.Notify();
}
}
}
//Thread.Sleep(this.m_Settings.Interval);
}
}
正如你所看到的,我只希望ShouldNotify()方法。但是,我的问题是,如果两个或更多线程调用NotifyIfNecesarry函数,它们共享lastChecked变量。因此,如果一个线程将其值重置为dateTime.Now,则其他值也会重置。
如何我写的方法,这样每个线程维护其自己的lastChecked?使用Thread.Sleep不是一个选项,因为当bool Run的值更改为false时,我需要该循环立即退出。如果我有一个thread.Sleep,并且线程正在休眠,程序将不会退出,直到它检查while条件,所以有可能会延迟m_settings.Interval。
之间除非我失去了一些东西共享 的`lastChecked`变量是局部的,但你说这是与共享此方法的其他实例。局部变量不在线程之间共享,所以我错过了什么,或者你是什么? – CodingGorilla 2010-12-07 19:56:14
此代码是什么?它是在线程运行还是在另一个类中? – Aliostad 2010-12-07 19:56:41