博客
关于我
LINUX延时函数使用
阅读量:318 次
发布时间:2019-03-04

本文共 1084 字,大约阅读时间需要 3 分钟。

LINUX 几种常用的延时方式会被信号以及中断打断,如果不对打断进行处理会导致延时时间不精确。

select

void ms_sleep(long lTime){    struct timeval sTime;    sTime.tv_sec    = lTime/1000;    sTime.tv_usec   = (lTime%1000)*1000;    while (select(0, NULL, NULL, NULL, &sTime)<0)     {        if(EINTR != errno)       {          perror("my_mSleep nanosleep");          break;       }    }}

关于select被打断返回剩余时间网上没有太多的介绍,在man里面有这样一句话

(ii) select() may update the timeout argument to indicate how much time was left. pselect() does not change this argument.

nanosleep

void ms_sleep(long lTime){    struct timespec sTime;    sTime.tv_sec = lTime / 1000;    sTime.tv_nsec = (lTime % 1000) * 1000000;    while (nanosleep(&sTime, &sTime)<0)    {         if(EINTR != errno)         {            perror("my_mSleep nanosleep");            break;         }    }}void us_sleep(long lTime){    struct timespec sTime;    sTime.tv_sec = lTime / 1000;    sTime.tv_nsec = (lTime % 1000000) * 1000;    while (nanosleep(&sTime, &sTime)<0)    {         if(EINTR != errno)         {            perror("my_mSleep nanosleep");            break;         }    }}

转载地址:http://itqq.baihongyu.com/

你可能感兴趣的文章
【AIX】AIX内存机制
查看>>
造成错误“ORA-12547: TNS:lost contact”的常见原因有哪些?
查看>>
wcf webHttpBinding Post 大数据量提交 ios c#客户端
查看>>
sql 时间总结
查看>>
【权限的思考】(一)使用反射实现动态权限
查看>>
多线程设置flag标志位实现同步
查看>>
[LeetCode题解]141. 环形链表 | 快慢指针
查看>>
MySQL错误日志(Error Log)
查看>>
MySQL二进制文件(binlog)
查看>>
Redis性能篇(二)CPU核和NUMA架构的影响
查看>>
MMORPG大型游戏设计与开发(客户端架构 part3 of vegine)
查看>>
C基础 带你手写 redis ae 事件驱动模型
查看>>
深度优先搜索和广度优先搜索
查看>>
我是个怎样的人
查看>>
C基础 北京大公司面试简单总结
查看>>
C高级 服务器内核分析和构建 (一)
查看>>
C基础 redis缓存访问
查看>>
C高级 框架开发中红黑树结构
查看>>
C后端设计开发 - 第1章-流派-入我华山,学我剑法
查看>>
C基础 工程中常用的排序
查看>>