问大家个问题

leidongjiutian1 2011-09-23 11:07:21
老师给我们个实验

用程序1测试程序二的可执行文件的核心态运行和用户态运行的时间。在dos下命令执行,出现了问题
程序1:
# include <windows.h>
# include <tlhelp32.h>
# include <iostream.h>

// 当在用户模式机内核模式下都提供所耗时间时,在内核模式下进行所耗时间的64位计算的帮助方法
DWORD GetKernelModePercentage(const FILETIME& ftKernel,
const FILETIME& ftUser)
{
// 将FILETIME结构转化为64位整数
ULONGLONG qwKernel=(((ULONGLONG)ftKernel.dwHighDateTime)
<<32)+ftKernel.dwLowDateTime;
ULONGLONG qwUser=(((ULONGLONG)ftUser.dwHighDateTime)
<<32)+ftUser.dwLowDateTime;

// 将消耗时间相加,然后计算消耗在内核模式下的时间百分比
ULONGLONG qwTotal=qwKernel+qwUser;
DWORD dwPct=(DWORD)(((ULONGLONG)100*qwKernel)/qwTotal);
return(dwPct);
}

// 以下是将当前运行过程名和消耗在内核模式下的时间百分数都显示出来的应用程序
void main(int argc,char *argv[])
{

if(argc<2)
{
cout<<"请给出你要查询的程序名"<<endl;
exit(0);
}

// 对当前系统中运行的过程拍取“快照”
HANDLE hSnapshot=::CreateToolhelp32Snapshot(
TH32CS_SNAPPROCESS, // 提取当前过程
0); // 如果是当前过程,就将其忽略

// 初始化过程入口
PROCESSENTRY32 pe;
::ZeroMemory(&pe,sizeof(pe));
pe.dwSize=sizeof(pe);
BOOL bMore=::Process32First(hSnapshot,&pe);
BOOL found = FALSE;
while(bMore)
{
// 打开用于读取的过程

if(!strcmp(pe.szExeFile,argv[1]))
{
found = TRUE;
HANDLE hProcess=::OpenProcess(
PROCESS_QUERY_INFORMATION, // 指明要得到信息
FALSE, // 不必继承这一句柄
pe.th32ProcessID); // 要打开的进程
if (hProcess!=NULL)
{
// 找出进程的时间
FILETIME ftCreation,ftKernelMode,ftUserMode,ftExit;
::GetProcessTimes(
hProcess, // 所感兴趣的进程
&ftCreation, // 进程的启动时间
&ftExit, // 结束时间 (如果有的话)
&ftKernelMode, // 在内核模式下消耗的时间
&ftUserMode); // 在用户模式下消耗的时间

// 计算内核模式消耗的时间百分比
DWORD dwPctKernel=::GetKernelModePercentage(
ftKernelMode, // 在内核模式上消耗的时间
ftUserMode); // 在用户模式下消耗的时间

// 向用户显示进程的某些信息
cout<< "process ID: " << pe.th32ProcessID
<< ",EXE file:" << pe.szExeFile
<< ",%d in Kernel mode: " << dwPctKernel << endl;

// 消除句柄
::CloseHandle(hProcess);
}
}
// 转向下一个进程
bMore=::Process32Next(hSnapshot,&pe);
}
if(found==FALSE)
{
cout<<"当前系统没有这个可执行程序正在运行"<<endl;
exit(0);
}
}






实验二:
核心态运行和用户态运行时间测试程序
#include <stdio.h>
main()
{
int i,j;
while(1){
for(i=0;i<1000;i++);
for(j=1;j<1000;j++) printf(“enter kernel mode running.”);
}
}


在“命令提示符”窗口中运行实验1中生成的可执行文件,测实验二中可执行文件在核心态运行和用户态运行的时间。

E:\课程\os课\os实验\程序\os12\debug>time TEST.exe
想问下:time的作用是什么,如果可以的话,请把我的程序运行下
...全文
42 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

6,849

社区成员

发帖
与我相关
我的任务
社区描述
Windows 2016/2012/2008/2003/2000/NT
社区管理员
  • Windows Server社区
  • qishine
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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