线程切换??时间片??

如下情况:
例如 我有一个 函数A,需要运行差不多 1、2s 时间。
那么它在运行过程中,肯定会被分割成好多个 时间片 来跑,那我能不能有啥方法得知这个函数运行过程中经历了几个时间片????
比如我有一个全局变量 int i ,在 函数A 开始的时候 i=0 ,在 函数A 经历 线程切换的时候,i++ ,这样在 函数A 跑完的时候 我查看 i 就知道经历了几次 线程切换了。

能不能实现啊??

作者: okmnjizc   发布时间: 2011-06-16

帮顶
为什么要获取这个数?

作者: ouyh12345   发布时间: 2011-06-16

不可能把,太底层了

作者: hustlaofan   发布时间: 2011-06-16

没有办法通过API获取到的,而且这个值也毫无意义吧。

倒是有API可以获取线程的实际执行时间就是了。

作者: kyotrue   发布时间: 2011-06-16

经历了几个时间片 != 经历了几次 线程切换

作者: yzm888   发布时间: 2011-06-16

Kthread->ContextSwitches

typedef struct _SYSTEM_THREADS { 
LARGE_INTEGER KernelTime; 
LARGE_INTEGER UserTime; 
LARGE_INTEGER CreateTime; 
ULONG WaitTime; 
PVOID StartAddress; 
CLIENT_ID ClientId; 
KPRIORITY Priority; 
KPRIORITY BasePriority; 
ULONG ContextSwitchCount; 
THREAD_STATE State; 
KWAIT_REASON WaitReason; 
} SYSTEM_THREADS, *PSYSTEM_THREADS; 

作者: smwhotjay   发布时间: 2011-06-16

windows下你是基本上无法知道的,因为不同版本的系统调度算法略微不同,而且线程也分优先级,同等优先级下大概20ms的时间片。线程中有个CONTEXT结构来记录线程的上下文,里面有保存被调度的次数。

作者: chenjiawei007   发布时间: 2011-06-16

引用 4 楼 yzm888 的回复:
经历了几个时间片 != 经历了几次 线程切换

想错

作者: yzm888   发布时间: 2011-06-16

这要看CPU频率,一般的情况,切换一次20ms

作者: g68743513   发布时间: 2011-06-16

操作系统底层的操作,需要底层获取.

作者: oyljerry   发布时间: 2011-06-16

引用 9 楼 oyljerry 的回复:
操作系统底层的操作,需要底层获取.

稍微 随便 给点信息~~ 给点关键字让我查查也行啊

作者: okmnjizc   发布时间: 2011-06-16