linux c如何实现时间间隔事件

linux c如何实现时间间隔事件,第1张

1)阻塞式时间间隔,

...

sleep( interval ) //其中变量interval是秒的数量。

//do another thing

2)非阻塞式,

time_ttStart = time(NULL)

...

...

...

if( time(NULL)-tStart >interval )

{

//do another thing

tStart = time(NULL)

}

...

linux的stdio不支持监听键盘的按键,你需要包含扩展的头文件和库。

比如包含termios.h,这个头文件里有一些终端IO的相关扩展。我们使用tcsetattr来设置一个属性,就可以不用回车就即时监听到按键。

#include <termios.h>

//....其它代码

int in

struct termios new_settings

struct termios stored_settings

tcgetattr(0,&stored_settings)    /* 把当前设置保存起来,以供恢复 */

new_settings = stored_settings

new_settings.c_lflag &= (~ICANON) /* 新设置,将canonical模式取消,屏蔽整行缓存 */

new_settings.c_cc[VTIME] = 0   /* 超时设置为0 */

new_settings.c_cc[VMIN] = 1    /* 读取的最小字符数 */

tcsetattr(0,TCSANOW,&new_settings)

in = getchar()   /* 此时就可以正常的使用getchar()函数来获取一个输入了 */

/* 此时,你可以使用while,并将获得的输入进行处理 */

tcsetattr(0,TCSANOW,&stored_settings)    /* 恢复原设置 */

另外,你可以考虑使用linux/input.h,使用事件监控的方式,来监控键盘事件。这个功能就强大多了,但是,这个 *** 作只适用于本机,也就是说,这个事件,只能监听到与主机直接相连的键盘和鼠标的事件。如果使用ssh登录过去的,是监听不到。关于具体用法,自己搜一下就好。

所谓原子 *** 作,就是该 *** 作绝不会在执行完毕前被任何其他任务或事件打断,也就说,它的最小的执行单位,不可能有比它更小的执行单位,因此这里的原子实际是使用了物理学里的物质微粒的概念。

原子 *** 作通常用于实现资源的引用计数,在TCP/IP协议栈的IP碎片处理中,就使用了引用计数,碎片队列结构struct ipq描述了一个IP碎片,字段refcnt就是引用计数器,它的类型为atomic_t,当创建IP碎片时(在函数ip_frag_create中),使用atomic_set函数把它设置为1,当引用该IP碎片时,就使用函数atomic_inc把引用计数加1。

当不需要引用该IP碎片时,就使用函数ipq_put来释放该IP碎片,ipq_put使用函数atomic_dec_and_test把引用计数减1并判断引用计数是否为0,如果是就释放IP碎片。函数ipq_kill把IP碎片从ipq队列中删除,并把该删除的IP碎片的引用计数减1(通过使用函数atomic_dec实现)。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/7284486.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-03
下一篇 2023-04-03

发表评论

登录后才能评论

评论列表(0条)

保存