C定时器差返回0毫秒

C定时器差返回0毫秒,c,timer,clock,milliseconds,C,Timer,Clock,Milliseconds,我正在学习C(和Cygwin),并试图完成一个简单的任务远程执行系统 我挂断电话的一个简单要求是:“客户端将报告服务器响应每个查询所花费的时间。” 我尝试过四处搜索并实现了其他工作解决方案,但结果总是返回0 我所拥有的一个片段: #include <time.h> for(;;) { //- Reset loop variables bzero(sendline, 1024); bzero(recvline, 1024); printf(">

我正在学习C(和Cygwin),并试图完成一个简单的任务远程执行系统

我挂断电话的一个简单要求是:“客户端将报告服务器响应每个查询所花费的时间。”

我尝试过四处搜索并实现了其他工作解决方案,但结果总是返回0

我所拥有的一个片段:

#include <time.h>

for(;;)
{
    //- Reset loop variables
    bzero(sendline, 1024);
    bzero(recvline, 1024);
    printf("> ");
    fgets(sendline, 1024, stdin);

    //- Handle program 'quit'
    sendline[strcspn(sendline, "\n")] = 0;
    if (strcmp(sendline,"quit") == 0) break;

    //- Process & time command
    clock_t start = clock(), diff;
    write(sock, sendline, strlen(sendline)+1);
    read(sock, recvline, 1024);
    sleep(2);
    diff = clock() - start;
    int msec = diff * 1000 / CLOCKS_PER_SEC;

    printf("%s (%d s / %d ms)\n\n", recvline, msec/1000, msec%1000);
}
结果: 开始时间:15 结束时间:15 差异时间:0 每秒时钟数:1000

--最终工作代码--

#include <sys/time.h>

//- Setup clock
struct timeval start, end;

//- Start timer
gettimeofday(&start, NULL);

//- Process command
/* Process stuff */

//- End timer
gettimeofday(&end, NULL);

//- Calculate differnce in microseconds
long int usec =
    (end.tv_sec * 1000000 + end.tv_usec) -
    (start.tv_sec * 1000000 + start.tv_usec);

//- Convert to milliseconds
double msec = (double)usec / 1000;

//- Print result (3 decimal places)
printf("\n%s (%.3fms)\n\n", recvline, msec);
#包括
//-设置时钟
结构timeval开始、结束;
//-启动计时器
gettimeofday(&start,NULL);
//-进程命令
/*加工材料*/
//-结束计时器
gettimeofday(&end,NULL);
//-以微秒为单位计算差异
长整数usec=
(end.tv_sec*1000000+end.tv_usec)-
(start.tv_sec*1000000+start.tv_usec);
//-转换为毫秒
双毫秒=(双)usec/1000;
//-打印结果(小数点后3位)
printf(“\n%s(%.3fms)\n\n”,recvline,毫秒);

我想你误解了
clock()
sleep()


时钟
测量程序使用的CPU时间,但是
睡眠
将在不使用任何CPU时间的情况下睡眠。也许你想用
time()
gettimeofday()
来代替?

Cygwin意味着你在Windows上

在Windows上,执行线程上的“当前时间”仅每64秒(大约16毫秒)更新一次,因此如果
clock()
基于它,即使它返回毫秒数,其精度也不会超过15.6毫秒


GetThreadTimes()
也有相同的限制。

注意:我已经阅读了,但解决方案不起作用。原始的
时钟值是多少
printf(“%lld\n”,(long-long)start)
问题在于您的分配,您将差异分配给
int
,它将为任何小于1的值分配0,使用
float msec=float(clock()-start)/CLOCKS\u/SEC取而代之。@chux我得到的值是46,这是否意味着它实际上工作正常,而我只是处理错误?最好发布前后时间值。时差可能低于您的时钟滴答声。2) 同时发布不会影响
GetThreadTimes()
CLOCKS\u PER_second
值,如果
clock()
返回的值太小,可能是基于该值,而不是基于内部时钟。@Medinoc
timeBeginPeriod
?@user877329这是用于多媒体计时器的,但它们也有可能被用于这样的测量目的。不过,高分辨率性能计数器可能更合适。谢谢!实现了
time()
并使用
difftime()
计算差异,但是这有转换为ms的分辨率吗?@Blake No-
time
只需几秒钟,但是
gettimeofday
可以更精确,IIRC。非常感谢,刚刚为未来的程序员添加了我的最终代码。很高兴看到StackOverflow今晚对我很好哈哈
#include <sys/time.h>

//- Setup clock
struct timeval start, end;

//- Start timer
gettimeofday(&start, NULL);

//- Process command
/* Process stuff */

//- End timer
gettimeofday(&end, NULL);

//- Calculate differnce in microseconds
long int usec =
    (end.tv_sec * 1000000 + end.tv_usec) -
    (start.tv_sec * 1000000 + start.tv_usec);

//- Convert to milliseconds
double msec = (double)usec / 1000;

//- Print result (3 decimal places)
printf("\n%s (%.3fms)\n\n", recvline, msec);