我具有由不同線程訪問這個下面的代碼片段。 (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