nng协议分析记录--pthread_condattr_setclock 设置时钟属性

函数位于init.c中,用于设置时钟属性:

`pthread_condattr_setclock` 是一个用于设置条件变量属性对象的时钟属性的函数。在POSIX线程编程中,通过该函数可以指定在条件变量上进行定时等待操作时使用的时钟。

函数原型

#include <pthread.h>

int pthread_condattr_setclock(pthread_condattr_t *attr, clockid_t clock_id);

参数说明

- attr:指向条件变量属性对象 (`pthread_condattr_t`) 的指针。
- clock_id:用于定时等待操作的时钟ID。例如,可以是 CLOCK_REALTIME 或 CLOCK_MONOTONIC。其中:CLOCK_MONOTONIC值为1,而
CLOCK_REALTIME 值为0

 返回值

- 0:成功。
- 非零错误码:失败。

示例代码下面是一个如何使用 `pthread_condattr_setclock` 的示例:
 

#include <pthread.h>
#include <stdio.h>
#include <time.h>

int main() {
    pthread_condattr_t attr;
    pthread_cond_t cond;
    
    // 初始化条件变量属性
    pthread_condattr_init(&attr);
    
    // 将时钟设置为 CLOCK_MONOTONIC
    pthread_condattr_setclock(&attr, CLOCK_MONOTONIC);
    
    // 使用属性初始化条件变量
    pthread_cond_init(&cond, &attr);
    
    // 使用条件变量的代码
    
    // 销毁条件变量和属性
    pthread_cond_destroy(&cond);
    pthread_condattr_destroy(&attr);
    
    return 0;
}

在这个例子中,条件变量 `cond` 被配置为在定时等待操作时使用 `CLOCK_MONOTONIC` 时钟。

 注意事项

- 使用 `CLOCK_MONOTONIC` 可以避免系统时间的不连续跳变(例如,由于手动调整系统时钟或NTP调整)。
- 在使用完条件变量和属性对象后,务必销毁它们以避免资源泄漏。

`CLOCK_REALTIME` 和 `CLOCK_MONOTONIC` 是两种常见的时钟类型,在操作系统中有不同的用途和行为。

CLOCK_REALTIME`

`CLOCK_REALTIME` 代表系统的实时时钟,它表示从UTC时间1970年1月1日0时0分0秒(Unix纪元)起经过的秒数。该时钟随系统时间的改变而变化,例如手动调整系统时间或者通过网络时间协议(NTP)同步时钟时。

- 特点:
  - 可以被系统时间的调整影响。
  - 适用于需要与实际时间对应的场景,例如记录时间戳、调度定时任务等。
CLOCK_MONOTONIC

CLOCK_MONOTONIC代表单调递增的时钟,从系统启动后开始计时。该时钟不会受系统时间调整的影响,始终保持单调递增。

- 特点:
  - 不会被系统时间的调整影响。
  - 适用于测量时间间隔的场景,例如性能分析、计时器等。

使用场景对比

- CLOCK_REALTIME:适合用于需要反映真实世界时间的应用场景,如日程安排、日志记录等。
- CLOCK_MONOTONIC:适合用于需要测量时间间隔并且不希望受系统时间调整影响的场景,如计时器、超时控制等。

示例代码对比

#include <stdio.h>
#include <time.h>

void print_time(clockid_t clock_id, const char* clock_name) {
    struct timespec ts;
    clock_gettime(clock_id, &ts);
    printf("%s: %ld.%09ld seconds since epoch\n", clock_name, ts.tv_sec, ts.tv_nsec);
}

int main() {
    print_time(CLOCK_REALTIME, "CLOCK_REALTIME");
    print_time(CLOCK_MONOTONIC, "CLOCK_MONOTONIC");
    return 0;
}

运行上述代码可以打印出 `CLOCK_REALTIME` 和 `CLOCK_MONOTONIC` 的当前时间:

plaintext
CLOCK_REALTIME: 1627573847.123456789 seconds since epoch
CLOCK_MONOTONIC: 12345.123456789 seconds since boot
 

如上所示,CLOCK_REALTIME显示的是自1970年1月1日以来的时间,而 CLOCK_MONOTONIC 显示的是自系统启动以来的时间。

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值