繁体   English   中英

C# 定时器中的线程

[英]Thread in C# Timer

我有一个 windows 服务,它使用 System.Timers.Timer 每 X 分钟执行一次长时间操作。 我需要知道是否有办法在下一个循环中确定上一个执行是否仍在运行。
有没有办法知道前一个线程使用了多少 CPU memory?

一个简单的解决方案是使用在方法开始时设置的共享、易失性布尔值,并在结束时重置。 或者使用共享计数器的Interlocked.Increment /decrement 来保持方法中线程数的运行总数。

如果您不希望调用与另一个重叠,一种解决方案是使用 Threading.Timer,设置所需的到期时间和无限期。 在每个事件结束时,您调用.Change以重置到期时间。 另一种基本上做同样事情的方法是循环Task.Delay:

while(!cancellationToke.IsCancellationRequested){
    // do work
   await Task.Delay(periodTime);
}

您关于 CPU/内存的问题没有多大意义。 线程要么正在运行,要么正在等待运行,要么被阻塞。 唯一可以直接归因于线程的 memory 将是该线程的堆栈,通常很小,如果我没记错的话,默认情况下有 1Mb 的限制。 如果您想测量一个线程在运行 state 中的时间,您需要进行定期采样或检测调度程序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM