linux定时器
简介
这篇文章主要记录我在试图解决如何尽可能精确地在某个特定的时间间隔执行某项具体任务时的思路历程,并在后期对相关的API进行的归纳和总结,以备参考。
问题引出
很多时候,我们会有类似“每隔多长时间执行某项任务
”的需求,乍看这个问题并不难解决,实则并不容易,有很多隐含条件需要考虑,诸如:时间精度是多少?时间是否允许出现偏差,允许的偏差是多少,偏差之后如何处理?系统的负载如何?这个程序允许占用的系统资源是否有限制?这个程序运行的硬件平台如何?
为了便于分析,我们锁定题目为“每隔2妙打印当前的系统时间(距离UNIX纪元的秒数)
”。
基于sleep的朴素解法
看到这个题目,我想大家的想法和我一样,都是首先想到类似这样的解法:
#
include
<
stdio.
h>
int
main(
int
argc,
char
*
argv[
]
)
{
while
(
1)
{
printf
(
"%d\n"
,
time
(
NULL
)
)
;
sleep
(
2)
;
}
return
0;
}
如果对时间精度要求不高,以上代码确实能工作的很好。因为sleep的时间精度只能到1s:
#
include
<
unistd.
h>
unsigned
int
sleep
(
unsigned
int
seconds)
;
所以对于更高的时间精度(比如说毫秒)来说,sleep就不能奏效了。如果沿着这个思路走下去,还分别有精确到微妙和纳秒的函数usleep和nanosleep可用:
#
include
<
unistd.
h>
int
usleep
(
useconds_t usec)
;
Feature Test
Macro Requirements for
glibc (
see feature_test_macros(
7)
)
:
usleep
(
)
:
_BSD_SOURCE |
|
_XOPEN_SOURCE >
=
500
#
include
<
ti
相关文档:
Service Discovery Protocol(SDP)提供一种能力,让应用程序有方法发现哪种服务可用以及这种服务的特性。
服务发现协议(SDP或Bluetooth SDP)在蓝牙协议栈中对蓝牙环境中的应用程序有特殊的含意,发现哪个服务是可用的和确定这些可用服务的特征。SDP定义了bluetooth client发现可用bluetooth server服务和它们的特征的方法。 ......
函数原型:
#include <pthread.h>
void pthread_cleanup_push(void (*rtn)(void *),void *arg);
函数rtn是清理函数,arg是调用参数
void pthread_cleanup_pop(int execute);
在前面讲过线程的终止方式,是正常终止还是非 ......
//videoserver
#!/bin/bash
#
# videoserver
#
# chkconfig: 3456 11 91
# description: videoserver
# Source function library.
. /etc/rc.d/init.d/functions
prog="videoserver"
start() {
# Start daemons.
echo -n $"Starting $prog: "
/video/videoserver/recordvideosvr /video/videoserver ......
语 法:ifconfig [网络设备][down up -allmulti -arp -promisc][add<地址>][del<地址>][<网络设备类型> <硬件地址>][io_addr][irq ][media<网络媒介类型>][mem_start<内存地址>][metric<数目>][mtu<字节>][netmask<子网掩码>][tunnel<地址>][-broadc ......