我知道在 Windows 机器上通过托管语言(如 C#、Java 等)遇到上下文切换时无法监听、检测和执行某些操作。但是,我想知道是否有一种方法可以使用汇编(或其他语言,也许是 C)?如果是这样,您能否提供一个小代码片段来说明如何执行此操作(因为我对内核编程还比较陌生)?
这段代码的主要设计目的是在标准 Windows UI 的后台运行,并监听特定进程何时上下文切换到 CPU 或从 CPU 切换出去。一旦听到这些 Action 中的任何一个,它就会发出一个信号。澄清一下,我只想检测直接涉及特定进程的上下文切换,而不是任何上下文切换。我最终想要实现的是能够在特定进程开始使用 CPU 以及停止使用时通知另一台机器(通过互联网信号)。
我第一次尝试这样做涉及简单地计算特定进程的 CPU 使用百分比,但最终证明这过于粗略,无法捕捉到最微小的计算。例如,我编写了一个测试程序,它简单地执行运算 2+2 并将答案放在一个 int 中。 CPU 使用率方法没有注意到这一点。因此,我正在寻找较低级别的东西,因此是这个问题的起源。如果有潜在的替代方案,我会非常乐意将它们投入使用。
最佳答案
有 Event Tracing for Windows (ETW) ,您可以将其配置为接收有关系统中发生的各种事件的消息。
您应该能够接收有关线程调度事件的消息。 CSwitch class事件就是为此。
抱歉,我不知道有什么好的 ETW 示例可以轻松地重复用于您的任务。阅读 MSDN 并环顾四周。
Simon指出了一个很好的链接,解释了为什么 ETW 有用。很有启发性:http://randomascii.wordpress.com/2012/05/11/the-lost-xperf-documentationcpu-scheduling/
关于c - 通过程序集以编程方式检测上下文切换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12588782/