C# 如何知道给定给线程的实际时间片?

C# 如何知道给定给线程的实际时间片?,c#,.net,windows,multithreading,operating-system,C#,.net,Windows,Multithreading,Operating System,我知道实际时间片是可变的,取决于几个因素,如操作系统和处理器 但是有没有一种方法可以让一个线程在它有CPU的时候计算分配给它的时间片呢?有趣的问题;但我认为:可能不会 为了从线程内部测量,线程需要知道两个事件: 线程启动/恢复;获取CPU时间;然后开始跑步 线程被“挂起”,并停止执行 从这里开始:即使你找到了一种机制来告诉线程“你刚刚恢复”——你怎么能告诉线程它何时被挂起?换句话说:您将需要两个钩子,它们以某种方式通知线程,而不仅仅是“您已恢复”;还有关于“你很快就会被停职”;这样线程本身就可以

我知道实际时间片是可变的,取决于几个因素,如操作系统和处理器


但是有没有一种方法可以让一个线程在它有CPU的时候计算分配给它的时间片呢?

有趣的问题;但我认为:可能不会

为了从线程内部测量,线程需要知道两个事件:

  • 线程启动/恢复;获取CPU时间;然后开始跑步
  • 线程被“挂起”,并停止执行
  • 从这里开始:即使你找到了一种机制来告诉线程“你刚刚恢复”——你怎么能告诉线程它何时被挂起?换句话说:您将需要两个钩子,它们以某种方式通知线程,而不仅仅是“您已恢复”;还有关于“你很快就会被停职”;这样线程本身就可以记账了


    给出您的评论:是的,如果底层操作系统允许确定CPU片的持续时间,则持续时间恒定;那么线程就不需要知道“事件2”。

    使用sysinternals中的工具来检查?的副本?并记录:我喜欢这个问题。它让人深思;在线程可以测量自身利用率的地方实现一些东西听起来是一个有趣的挑战@幽灵猫:谢谢。:-)非常感谢。我也很怀疑,因为你提到的原因。如果这是不可能的,那么从一个操作系统结构中读取一个变量来告诉你一个时间片测量了多少是可能的吗?我更新了我的答案;但仍处于元水平;由于我缺少深入的.Net和Windows操作系统知识,无法给出真正的技术性答案。