首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Linux中的sleep、usleep、nanosleep、poll和select

在进行Linux C/C++编程时,可调用的sleep函数有好多个,那么究竟应当调用哪一个了?...下表列出了这几个函数间的异同点,可作为参考: 性质 精准度 线程安全 信号安全 sleep libc库函数 秒 是 不能和alarm同时使用 有些是基于alarm实现的,所以不能和alarm同时使用...usleep libc库函数 微秒 - - POSIX.1-2001已将usleep标注为废弃,POSIX.1-2008已删除usleep,应当使用nanosleep替代usleep nanosleep...); #endif // __cplusplus >= 201103L 上述介绍的sleep函数均不方便控制它们提前结束,如果需要这种sleep,可基于pthread_cond_timedwait实现...,实现可参考CEvent源码: https://github.com/eyjian/libmooon/blob/master/src/sys/event.cpp

4.9K40

Linux中的sleep、usleep、nanosleep、poll和select

在进行Linux C/C++编程时,可调用的sleep函数有好多个,那么究竟应当调用哪一个了?...下表列出了这几个函数间的异同点,可作为参考: 性质 精准度 线程安全 信号安全 sleep libc库函数 秒 是 不能和alarm同时使用 有些是基于alarm实现的,所以不能和alarm同时使用...usleep libc库函数 微秒 - - POSIX.1-2001已将usleep标注为废弃,POSIX.1-2008已删除usleep,应当使用nanosleep替代usleep nanosleep...系统调用 纳秒 是 不确定 即使被信号中断,也可实现实际睡眠时长不小于参数指定时长 clock_nanosleep 系统调用 纳秒 是 不确定 区别于nanosleep,可选择为相对或绝对时间,其次是可以选择使用哪个时钟...,实现可参考CEvent源码: https://github.com/eyjian/libmooon/blob/master/src/sys/event.cpp 看完本文有收获?

7.1K20
您找到你想要的搜索结果了吗?
是的
没有找到

Usleep timerslack_ns background thread in android

在android 手机上,如果call usleep(2*1000),结果sleep时间不定,甚至结果sleep了50+ms,是不是有点过分,测试代码如下:各位可以在手机上测试下,特别是把程序放在后台运行的情况下..., usleep); __weak_reference(__usleep, _usleep); Key function nanosleep,它能提供纳秒级的延时精度,该用户空间函数对应的内核实现是sys_nanosleep...,它的工作交由高精度定时器系统的hrtimer_nanosleep函数实现,最终的大部分工作则由do_nanosleep完成。...,并且不是RT thread,那么这个usleep的时间不是准确的。...最常见的可能就是后台播放音乐会有“啪啪啪”的噪音,其原因就是usleep 不准确,而导致拿不到数据而出现noise。

1.8K20

java当中的线程和操作系统的线程是什么关系?

根据man配置的信息可以得出pthread_create会创建一个线程,这个函数是linux系统的函数,可以用C或者C++直接调用,上面信息也告诉程序员这个函数在pthread.h, 这个函数有四个参数...main线程 int main() { //调用操作系统的函数创建线程,注意四个参数 pthread_create(&pid,NULL,thread_entity,NULL); //usleep...如果不睡眠会出现什么情况 usleep(100); printf("main\n"); } 假设有了上面知识的铺垫,那么可以试想一下java的线程模型到底是什么情况呢?...说白了我们大胆猜想 start-start0-ptherad_create 我们鉴于这个猜想来模拟实现一下。 ? ? 如何来模拟实现呢?...接下来我们来实现一下这个run 首先在java的代码里面提供一个run方法 package com.luban.concurrency; public class LubanThread {

1.1K30

C语言之Sleep函数

函数: 功 能: 执行挂起一段时间   用 法: unsigned sleep(unsigned seconds);   注意:   在VC中使用带上头文件#include ,在Linux...下,gcc编译器中,使用的头文件因gcc版本的不同而不同#include   在VC中,Sleep中的第一个英文字符为大写的"S" ,在linux下不要大写,在标准C中是sleep,...不要大写,简单的说VC用Sleep, 别的一律使用sleep 在VC中,Sleep()里面的单位,是以毫秒为单位,所以如果想让函数滞留1秒的话,应该是Sleep(1000); 在Linux下,sleep...函数: 功能: usleep功能把进程挂起一段时间, 单位是微秒us(百万分之一秒)。...语法: void usleep(int micro_seconds); 返回值: 无 注意:这个函数不能工作在 Windows 操作系统中。 usleep() 与sleep()类似,用于延迟挂起进程。

7.4K80

Linux 实现群聊功能

今天的主题是在 Linux实现一个群聊功能,支持群聊,指定人私聊,群主禁言,踢出群聊的功能,实际上要实现这个功能,如果你阅读过我前两天我写一篇 Linux原始系统api实现两个终端实时聊天 ,那么,...在以上的基础上其实就是追加一下 两个功能即可,及群主禁言,和将谁踢出群聊的功能,因为群聊的基本功能我们实现了,而且私信的逻辑我们也实现了,ps,文本的代码在此。...A 向服务端发送一条消息服务端收到 A 的消息之后,将这条消息转发给到了所有的人,当然除了 A,这里的代码逻辑一撇如下,全部详细的代码就需要参考 Linux原始系统api实现两个终端实时聊天 这里了...buffer, strlen(buffer), 0); } }}私信的效果是:A 发送一条给到 B 的私信,只有 B 可以收到,C 是收不到的只有 B 收到的截图C 是收不到的继续实现禁言某人和踢出用户的功能要实现禁言的功能...2.实现踢出的逻辑这里的实现方式和实现屏蔽略微不同,而且还稍显简单,直接干掉 server 和 client 的连接即可,实现的方式如下:else if (strncmp(s, "/kick ", 6)

49850

宋宝华: 用off-cpu火焰图进行Linux性能分析

在《宋宝华:火焰图:全局视野的Linux性能剖析》一文中,我们主要看了on-cpu火焰图,理解了系统的CPU的走向的分析。...一个发生在usleep()调用的hrtimer_nanosleep -> do_nanosleep系统调用;一个发生在printf()的时候,进入sys_write系统调用后,tty_write的n_tty_write...这个时候,我们可以进一步查看Linux内核的代码 https://lxr.missinglinkelectronics.com/linux+v4.18/drivers/tty/n_tty.c#L2285...所以,如果我们想实现每秒打印hello world尽可能多的目标,显然应该删除那个usleep,以及分析为什么这个mutex_lock要这么久,看看内核里面有无优化的空间。...如果我们想优化性能,一个是可以消除usleep,第二个是分析为什么mutex_lock要等这么久,有什么空间可以提高。

2.3K31

嵌入式操作系统开发实战:不同操作系统下的嵌入式开发

MicropythonMicropython是一个用于微控制器的Python实现,适用于资源受限的嵌入式环境。...线程通过usleep函数进行简单的延时使用Linux嵌入式系统的简单多线程示例。使用了POSIX线程库来创建两个线程,分别执行不同的任务逻辑。...void *thread1(void *arg) { while (1) { // 线程1的代码 // 在这里添加具体的任务逻辑 usleep...return NULL;}void *thread2(void *arg) { while (1) { // 线程2的代码 // 在这里添加具体的任务逻辑 usleep...线程通过usleep函数进行简单的延时。进一步深入实时性能比较在选择嵌入式操作系统时,实时性能是一个重要的考虑因素。FreeRTOS以其精简设计和实时性能而闻名,适用于对任务响应时间要求严格的场景。

25010

TP-LINK WR941N路由器研究

然后进行实际测试了一番,把usleep的时间修改为18217,同样没用,然后简单看了下两者的汇编,发现usleep只是简单的调用nanosleep,而sleep除了调用nanosleep还进行其他相关的操作...所以最终我的做法是在wr940n的exp的ROP链中,调用的是usleep(0xc*2+1),但是我将usleep改成sleep => sleep(0xc*2+1),数据缓存被成功flush到主内存中,...下的syscall一样,可参考: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/arch/mips/include.../uapi/asm/unistd.h 比如sys_socket: #define __NR_Linux 4000 #define __NR_socket (__NR_Linux + 183) 所以...family, int type, int protocol) 现在,先用c来实现一遍反连shell的代码: $ cat test.c #include #include <sys

2.1K80

TP-LINK WR941N路由器研究

然后进行实际测试了一番,把usleep的时间修改为18217,同样没用,然后简单看了下两者的汇编,发现usleep只是简单的调用nanosleep,而sleep除了调用nanosleep还进行其他相关的操作...所以最终我的做法是在wr940n的exp的ROP链中,调用的是usleep(0xc*2+1),但是我将usleep改成sleep => sleep(0xc*2+1),数据缓存被成功flush到主内存中,...下的syscall一样,可参考: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/arch/mips/include..._NR_Linux + 183) 所以$v0=4183表示的就是socket函数,具体参数信息可以去参考linux的系统调用: http://asm.sourceforge.net/syscall.html...int sys_socket(int family, int type, int protocol) 现在,先用c来实现一遍反连shell的代码: $ cat test.c #include<stdlib.h

1.2K60
领券