.net 应用程序空闲-此线程安全吗?
这应该是线程安全的,对吗?有没有更好的办法.net 应用程序空闲-此线程安全吗?,.net,vb.net,thread-safety,.net,Vb.net,Thread Safety,这应该是线程安全的,对吗?有没有更好的办法 Imports System.Threading Public Class ApplicationIdleHelper Private Shared lastInputTicks As Long Public Shared Sub SetLastInputTime(dt As DateTime) Interlocked.Exchange(lastInputTicks, dt.Ticks) End Sub
Imports System.Threading
Public Class ApplicationIdleHelper
Private Shared lastInputTicks As Long
Public Shared Sub SetLastInputTime(dt As DateTime)
Interlocked.Exchange(lastInputTicks, dt.Ticks)
End Sub
Public Shared Function GetIdleTime() As Integer
Return (Now - New DateTime(Interlocked.Read(lastInputTicks))).TotalSeconds
End Function
End Class
在我的应用程序中,我使用PreFilterMessage
事件中的SetLastInputTime
方法设置lastInputicks
值。在其他一些线程中
我必须检查这个变量。我通过调用GetIdleTime
来实现这一点,但现在我不确定这是线程安全的还是会遇到麻烦
提前谢谢你 您的解决方案看起来不错。
Interlocked
涵盖了对所讨论变量的所有访问,因此访问应该是正常的,并且在GetIdleTime
函数中不会收到任何损坏的值
唯一需要注意的是,您可能会从GetIdleTime
函数接收到旧值,因为与新值的交换没有完成。因此,如果同时或多或少调用了SetLastInputTime
和GetIdleTime
,则GetIdleTime
函数可能显示也可能不显示更新的时间
无论如何,我认为没有比这更好的办法了。重叠通话问题是你永远无法摆脱的。这就是多线程的本质