gpt4 book ai didi

c# - 不同线程共享一个对象

转载 作者:行者123 更新时间:2023-11-30 12:17:00 26 4
gpt4 key购买 nike

我有以下代码片段,它被不同的线程访问。

         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);
}
}

如您所见,我只希望在每个给定的时间间隔 (m_settings.Interval) 之后调用 ShouldNotify() 方法。但是,我的问题是,如果两个或多个线程调用了 NotifyIfNecesarry 函数,它们将共享 lastChecked 变量。因此,如果一个线程将它的值重置为 dateTime.Now,它也会为其他线程重置。

如何编写该方法以便每个线程都维护自己的 lastChecked?使用 Thread.Sleep 不是一个选项,因为当 bool Run 的值更改为 false 时,我需要循环立即退出。如果我有一个 thread.Sleep,并且该线程正在休眠,程序将在检查 while 条件之前不会退出,因此可能存在 m_settings.Interval 的 mak 延迟。

最佳答案

您应该跳过循环并使用例如 System.Timers.Timer .而且你的锁也不合适。它应该在循环之外而不是每个实例创建。使用锁时,所有线程必须锁定同一个对象。

关于c# - 不同线程共享一个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4380952/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com