当前位置:  技术问答>linux和unix

linux系统下usleep()函数使用的问题?

    来源: 互联网  发布时间:2017-01-15

    本文导语:   各位,我在linux下开发一应用程序,其中一段的程序大概如下: while(1) {    FuncDoThing();    usleep(secs*1000*1000);  //secs为暂停的秒数.secs的值大概为1,2,3.        if(满足某条件)      break; } 这段程序刚开始时,运行时...

 各位,我在linux下开发一应用程序,其中一段的程序大概如下:

while(1)
{
   FuncDoThing();
   usleep(secs*1000*1000);  //secs为暂停的秒数.secs的值大概为1,2,3.
   
   if(满足某条件)
     break;
}

这段程序刚开始时,运行时每隔几秒会运行FuncDoThing函数,
一切很正常。但是当发生一次usb设备断开连接后,
感觉就不停的去运行FuncDoThing()函数,没有任何延迟,
usleep()没有起到作用,所以想问一下各位,usleep()函数使用有什么技巧.谢谢!




|
SYNOPSIS
       #include 

       int pselect(int nfds, fd_set *restrict readfds,
              fd_set *restrict writefds, fd_set *restrict errorfds,
              const struct timespec *restrict timeout,
              const sigset_t *restrict sigmask);
       int select(int nfds, fd_set *restrict readfds,
              fd_set *restrict writefds, fd_set *restrict errorfds,
              struct timeval *restrict timeout);
       void FD_CLR(int fd, fd_set *fdset);
       int FD_ISSET(int fd, fd_set *fdset);
       void FD_SET(int fd, fd_set *fdset);
       void FD_ZERO(fd_set *fdset);


DESCRIPTION
       The pselect() function shall examine the file descriptor sets whose addresses are passed in the readfds,  writefds,  and  errorfds
       parameters to see whether some of their descriptors are ready for reading, are ready for writing, or have an exceptional condition
       pending, respectively.

       The select() function shall be equivalent to the pselect() function, except as follows:

        * For the select() function, the timeout period is given in seconds and microseconds in  an  argument  of  type  struct  timeval,
          whereas  for  the pselect() function the timeout period is given in seconds and nanoseconds in an argument of type struct time‐
          spec.


用pselect替代把,提供nanoseconds级别的睡眠。

|
会不会是因为usleep被某种信号中断了

|

/*sleep in us*/
void usSleep(unsigned int nusecs)
{
struct timeval tval;

tval.tv_sec = nusecs / 1000000;
tval.tv_usec = nusecs % 1000000;
select(0, NULL, NULL, NULL, &tval);
}


|
这个值得围观。

|
另外pselect可以睡眠时阻塞一个信号集,const sigset_t *restrict sigmask,可能正好也符号你的要求。

另外,我看有个ualarm函数:

SYNOPSIS
       #include 

       useconds_t ualarm(useconds_t usecs, useconds_t interval);

提供微秒级的。

|
用select吧,避免不必要的干扰 

|
好!!!

|
你换一个呗,用select也可以

|

+1

|
usleep()是个短延迟,应该使用select,它可以达到一个时钟中断的周期精度。

|
不懂。帮顶

|
关注下

    
 
 

您可能感兴趣的文章:

  • Linux c++虚函数(virtual function)简单用法示例代码
  • 在dos下访问内存的MK_FP函数在linux下对应什么函数?int86()函数呢?
  • linux c下利用srand和rand函数生成随机字符串
  • 哪位大侠有unix/linux的函数和函数所在的文件
  • Linux下c基于openssl生成MD5的函数
  • linux中,动态库中的函数如何调用静态库中的函数
  • Linux Kernel 'sctp_v6_xmit()'函数信息泄露漏洞
  • linux0.11内核有些函数是封装的吗?比如timer_interrupt()函数。
  • Linux下gettimeofday()函数和clock()函数:精确到毫秒级的时间
  • linux下自带了soup函数库和XML处理函数库了吗?
  • linux c 生成随机数srand函数和rand函数介绍及代码示例
  • linux下类的成员函数不可以作为自定义的信号处理函数么?
  • Linux下c函数dlopen实现加载动态库so文件代码举例
  • Linux有定时器函数吗?是不是要自己实现?如果有的话是什么函数呢?谢谢
  • linux c malloc函数定义及用法详解
  • linux c入门问题,大家指教。system函数和exec函数的区别。
  • Windows和Linux下C++类成员方法作为线程函数方法介绍
  • linux 2.6.35.4 内核中已没有netif_rx_schedule()函数,那替代函数是啥?
  • Linux下C语言strstr()查找子字符串位置函数详细介绍(strstr原型、实现及用法)
  • wcslen 等函数能用在linux下面吗?文件路径搜索有没有跨平台的函数库?
  • unix/Linux下c/c++ pthread库读写锁函数介绍
  • Linux 下析构函数为什么不是虚函数?
  • Docker官方镜像将会使用Alpine Linux替换Ubuntu
  • linux支持ti-rpc么?ti-rpc在linux中是不是只使用udp协议,不能使用tcp协议
  • linux下free命令显示的内存使用情况分析
  • 求redhat linux 9.0下可以使用的oracle 10g或9i,还有redhat linux 9.0下可以使用的eclipse下载地址
  • linux下不使用sudo命令执行docker的操作步骤
  • 在XP下使用VMWare安装了Linux AS 5.6之后,使用FTP工具可以远程连接Linux,而在cmd命令行中却连接不上,什么原因 ?
  • 如何使用linux下gdb来调试python程序
  • 原来装了linux和win2k,使用LiLO启动,现在重新win2k,如何恢复使用LILO来引导使得Linux可用
  • linux/Centos/ubuntu下如何使用umask命令修改新建文件时的默认权限
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • linux平台usleep(time);函数是否是原子操作不能被CPU线程切换打断?
  • linux下调用sleep或者usleep函数的CPU线程调度情况?
  • linux c/c++ IP字符串转换成可比较大小的数字
  • 在win分区上安装linux和独立分区安装linux有什么区别?可以同时安装吗?(两个linux系统)
  • linux哪个版本好?linux操作系统版本详细介绍及选择方案推荐
  • 在虚拟机上安装的linux上,能像真的linux系统一样开发linux程序么?
  • secureCRT下Linux终端汉字乱码解决方法
  • mysql iis7站长之家
  • Linux c字符串中不可打印字符转换成16进制
  • 安装vmware软件,不用再安装linux系统,就可以模拟linux系统了,然后可以在其上学习一下LINUX下的基本操作 了?
  • Linux常用命令介绍:更改所属用户群组或档案属性
  • 红旗Linux主机可以通过127.0.0.1访问,但如何是连网的Win2000机器通过Linux的IP去访问Linux
  • linux命令大全详细分类介绍及常用linux命令文档手册下载
  • 我重装window后,把linux的引导区覆盖了,进不了linux怎么办?急啊,望热心的人帮助 (现在没有linux的盘,只有DOS启动盘)
  • Linux下chmod命令详细介绍及用法举例
  • 如何让win2000和linux共存。我装好WIN2000,再装LINUX7.0,但LILO只能找到LINUX,不能引导WIN2000
  • linux僵尸(zombie)进程介绍及清除
  • 在windows中的VMware装了个linux,主板有两个串口,能做windows和linux的串口通信测试么,怎么测试这两个串口在linux是有效
  • Linux/CentOS下的CST和UTC时间的区别以及不一致的解决方法
  • 我们网站的服务器从windows2000迁往linux,ASP程序继续使用,可是我连LINUX的皮毛都不了解,大家告诉我LINUX下怎么建网站??
  • Linux c++库boost unordered_set数据插入及查找代码举例
  • 中文Linux与西文Linus分别哪一个版是权威?I认为是:中科软的白旗Linux与西文的绿帽子Linux!大家的看法呢?
  • unix/Linux下c++ boost thread库读写锁介绍
  • 我重装了winme,却进不了Linux了,而我现在又没有Linux光盘,也没有Linux启动盘,还有没有办法?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3