2 u011326325 u011326325 于 2016.04.03 15:46 提问

UNIX环境高级编程 times() 疑问
  1. 例程
 int main(int argc, char *argv[])
{
        clock_t s_clk,e_clk;
        struct tms s_tms,e_tms;

        s_clk = times(&s_tms);
        system("ls /dev");
        system("date");
        sleep(1);
        e_clk = times(&e_tms);
        printf("e_clk %ld - s_clk %ld = %ld\n",e_clk , s_clk,e_clk-s_clk);
// pr_time(1,s_tms,e_tms);

        printf("user time e_tms %ld - s_tms %ld = %ld\n",
                        e_tms.tms_utime,s_tms.tms_stime,(e_tms.tms_utime - s_tms.tms_utime));
        printf("system time e_tms %ld - s_tms %ld = %ld\n",
                        e_tms.tms_stime,s_tms.tms_stime,(e_tms.tms_stime - s_tms.tms_stime));

        return 0;
}

./a.out
2016年 04月 03日 星期日 15:40:10 CST
e_clk 1742131978 - s_clk 1742131878 = 100
user time e_tms 0 - s_tms 0 = 0
system time e_tms 0 - s_tms 0 = 0

时间差为什么还是 0.

3个回答

qq423399099
qq423399099   Ds   Rxr 2016.04.03 19:53

楼主要不sleep久一点试试。
如果一个进程 的运行时间很短,短到和系统的计时器间隔一个数量级,用这种方法测出来的结果必然是不够精确的,头尾都有误差。

CSDNXIAON
CSDNXIAON   2016.04.07 19:10

UNIX环境高级编程----文件属性及权限
----------------------同志你好,我是CSDN问答机器人小N,奉组织之命为你提供参考答案,编程尚未成功,同志仍需努力!

qq_29491663
qq_29491663   2016.06.21 08:59

你的代码获取的是本进程占用的时间,而system函数是创建了一个子进程执行命令,所以在你的代码里,父进程执行时间很短,子进程执行时间较长。你换一个复杂的系统调用命令查看子进程的相关时间就可以看出了,或者你写一个复杂的父进程吧。

qq_29491663
qq_29491663 另外,第15行的第二个参数s_tms.tms_stime应该是s_tms.tms_utime吧
一年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!