b2科目四模拟试题多少题驾考考爆了怎么补救
b2科目四模拟试题多少题 驾考考爆了怎么补救

应用软件系统 Linux时间子系统(三) 用户空间接口函数(3)

电脑杂谈  发布时间:2018-02-14 23:31:48  来源:网络整理

#include <time.h>

int clock_getcpuclockid(pid_t pid, clockid_t *clock_id);

如果是线程的话,需要调用pthread_getcpuclockid接口函数:

#include <pthread.h>

#include <time.h>

int pthread_getcpuclockid(pthread_t thread, clockid_t *clock_id);

虽然这组函数接口的精度可以达到ns级别,但是实际的系统可以达到什么样的精度是实现相关的,因此,clock_getres用来获取系统时钟的精度。

4、系统时钟的调整

设定系统时间是一个比较粗暴的做法,一旦修改了系统时间,系统中的很多依赖绝对时间的进程会有各种奇奇怪怪的行为。正因为如此,系统提供了时间同步的接口函数,可以让外部的精准的计时服务器来不断的修正系统时钟。

(1)adjtime接口函数

int adjtime(const struct timeval *delta, struct timeval *olddelta);

该函数可以根据delta参数缓慢的修正系统时钟(CLOCK_REALTIME那个)。olddelta返回上一次调整中尚未完整的delta。

应用软件系统_用java应用软件系统_应用软件系统是什么

(2)adjtimex

#include <sys/timex.h>

int adjtimex(struct timex *buf);

RFC 1305定义了更复杂,更强大的时间调整算法,因此linux kernel通过sys_adjtimex支持这个算法,其用户空间的接口函数就是adjtimex。由于这个算法过去强大,这里就不再赘述,等有时间、有兴趣之后再填补这里的空白吧。

Linux内核提供了sys_adjtimex系统调用来支持上面两个接口函数。此外,还提供了sys_clock_adjtime的系统调用来支持POSIX clock tunning。

三、进程睡眠

1、秒级别的sleep函数:sleep

#include <unistd.h>

unsigned int sleep(unsigned int seconds);

调用该函数会导致当前进程sleep,seconds之后(基于CLOCK_REALTIME)会返回继续执行程序。该函数的返回值说明了进程没有进入睡眠的时间。例如如果我们想要睡眠8秒,但是由于siganl中断了睡眠,只是sleep了5秒,那么返回值就是3,表示有3秒还没有睡。

2、微秒级别的sleep函数:usleep

#include <unistd.h>

int usleep(useconds_t usec);

概念上和sleep一样,不过返回值的定义不同。usleep返回0表示执行成功,返回-1说明执行失败,错误码在errno中获取。

3、纳秒级别的sleep函数:nanosleep

#include <time.h>

int nanosleep(const struct timespec *req, struct timespec *rem);

usleep函数已经是过去式,不建议使用,取而代之的是nanosleep函数。req中设定你要sleep的秒以及纳秒值,然后调用该函数让当前进程sleep。返回0表示执行成功,返回-1说明执行失败,错误码在errno中获取。EINTR表示该函数被signal打断。rem参数是remaining time的意思,也就是说还有多少时间没有睡完。


本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/tongxinshuyu/article-78074-3.html

相关阅读
    发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

    热点图片
    拼命载入中...