线程切换??时间片??

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

能不能实现啊??
...全文
481 29 打赏 收藏 转发到动态 举报
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
vector03 2011-06-19
  • 打赏
  • 举报
回复
在线程内部用全局变量计数是绝对不可能的。但是线程内核对象里应该有这个计数值,查查sdk吧
smilestone322 2011-06-18
  • 打赏
  • 举报
回复
很随机的,你如果要获取运行多长的时间,可以,你要知道多少时间片,麻烦,因为线程的优先级不同,时间片也不同吧
Lactoferrin 2011-06-18
  • 打赏
  • 举报
回复
[Quote=引用 25 楼 wltg2001 的回复:]

引用 24 楼 lactoferrin 的回复:
process explorer就可以看到线程的切换次数

楼主问的好像不是线程的切换次数吧,它问的是一个函数A在执行过程中经历了几次切换啊!
[/Quote]
用那个方法就可以得到某个线程在执行a的过程切换了几次
palm_m 2011-06-18
  • 打赏
  • 举报
回复
调度策略同 ,很难实现
wltg2001 2011-06-18
  • 打赏
  • 举报
回复
[Quote=引用 24 楼 lactoferrin 的回复:]
process explorer就可以看到线程的切换次数
[/Quote]
楼主问的好像不是线程的切换次数吧,它问的是一个函数A在执行过程中经历了几次切换啊!
Lactoferrin 2011-06-18
  • 打赏
  • 举报
回复
process explorer就可以看到线程的切换次数
wltg2001 2011-06-18
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 lactoferrin 的回复:]
答案都出来了还不太可能
[/Quote]
那我错了。
Lactoferrin 2011-06-18
  • 打赏
  • 举报
回复
答案都出来了还不太可能
wltg2001 2011-06-18
  • 打赏
  • 举报
回复
个人觉得不太可能。
csx007700 2011-06-18
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 smwhotjay 的回复:]
Kthread->ContextSwitches

typedef struct _SYSTEM_THREADS {
LARGE_INTEGER KernelTime;
LARGE_INTEGER UserTime;
LARGE_INTEGER CreateTime;
ULONG WaitTime;
PVOID StartAddress;
CLIENT_ID Clien……
[/Quote]
正解
csx007700 2011-06-18
  • 打赏
  • 举报
回复
可以用驱动Hook SwapContext 或者 NtQuerySystemInformation把执行时间和CPU时间片大小拿到然后算一下...
MAY 2011-06-17
  • 打赏
  • 举报
回复
可以的,你可以嵌入汇编,直接的到CPU运行时间。



__int64 BegTime = 0;
__int64 EndTime = 0;


int a[ 3 ] = { 4, 5, 6 };

__asm
{
rdtsc
mov dword ptr [ BegTime ], eax
lea eax, dword ptr [ BegTime ]
mov dword ptr [ eax + 4 ], edx
}

ADD< 3, int >::Result( a );

__asm
{
rdtsc
mov dword ptr [ EndTime ], eax
lea eax, dword ptr [ EndTime ]
mov dword ptr [ eax + 4 ], edx
}


printf("%d___\n",EndTime - BegTime);




不过比支持多核。。。
whiteclouds 2011-06-17
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 gao5214637 的回复:]

你设置两个全局变量,运行到了就给加1
[/Quote]
曾经是C程序员吧?呵呵,全局变量不是好的代码风格,尽量少用。
Lactoferrin 2011-06-16
  • 打赏
  • 举报
回复
NtQuerySystemInformation
大头猫 2011-06-16
  • 打赏
  • 举报
回复
你设置两个全局变量,运行到了就给加1
whiteclouds 2011-06-16
  • 打赏
  • 举报
回复
很简单的问题,线程函数执行时给某个窗口发一个消息,消息响应函数里就可以记录执行次数了
大头猫 2011-06-16
  • 打赏
  • 举报
回复
GetTickCount();
大头猫 2011-06-16
  • 打赏
  • 举报
回复
获取运行时间,在第一个线程结束时,获取下系统运行时间,再到第二次运行前获取,应该就是切换时间了
kyotrue 2011-06-16
  • 打赏
  • 举报
回复
系统底层的无法通过API访问的。。。
专制的网站 2011-06-16
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 oyljerry 的回复:]
操作系统底层的操作,需要底层获取.
[/Quote]
稍微 随便 给点信息~~ 给点关键字让我查查也行啊
加载更多回复(9)

15,473

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 进程/线程/DLL
社区管理员
  • 进程/线程/DLL社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧