博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
freeBSD queue.c--定时器
阅读量:4004 次
发布时间:2019-05-24

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

/*- * Copyright (c) 1999 Lu Jiandong lujiandong1001@yahoo.com.cn * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in the *    documentation and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. *//* * kqueue 实现的定时器 * kqueue 是FreeBSD操作系统提供的一套高性能,通用的“事件”通知机制。它的最常见应用是网络编程中获取可以读写的socket。 * 它还可以提供定时器,文件操作等通知功能。 */#include 
#include
#include
#include
#include
#include
#include
struct kevent {      uintptr_t ident;       /* 事件 ID */      short     filter;       /* 事件过滤器 */      u_short   flags;        /* 行为标识 */      u_int     fflags;       /* 过滤器标识值 */      intptr_t  data;         /* 过滤器数据 */      void      *udata;       /* 应用透传数据 */  }; 在一个 kqueue 中,{ident, filter} 确定一个唯一的事件。 
void test(){int kqueuefd = kqueue();struct kevent ev;
 
//在给定的描述符上由内核来对这个过滤器进行监控(有好多不同的过滤器)	EV_SET(&ev, -1, EVFILT_TIMER, EV_ADD | EV_ENABLE, 0, 40, NULL); //40 milliseconds	kevent(kqueuefd, &ev, 1, NULL, 0, NULL);	struct kevent newev;	int count = -1;	while(1) {		count = kevent(kqueuefd, NULL, 0, &newev, 1, NULL);		if (!count){			printf("no event\n");			continue;		}			struct timeval tv;		gettimeofday(&tv, NULL);			printf("time :sec = %u usec = %u\n", tv.tv_sec, tv.tv_usec); 		usleep(30);	}		}int main(int argc, char *argv[]){	test();	return 0;

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

你可能感兴趣的文章
[关注大学生]求职不可不知——怎样的大学生不受欢迎
查看>>
[关注大学生]读“贫困大学生的自白”
查看>>
[互联网关注]李开复教大学生回答如何学好编程
查看>>
[关注大学生]李开复给中国计算机系大学生的7点建议
查看>>
[关注大学生]大学毕业生择业:是当"鸡头"还是"凤尾"?
查看>>
[茶余饭后]10大毕业生必听得歌曲
查看>>
gdb调试命令的三种调试方式和简单命令介绍
查看>>
C++程序员的几种境界
查看>>
VC++ MFC SQL ADO数据库访问技术使用的基本步骤及方法
查看>>
VUE-Vue.js之$refs,父组件访问、修改子组件中 的数据
查看>>
Vue-子组件改变父级组件的信息
查看>>
Python自动化之pytest常用插件
查看>>
Python自动化之pytest框架使用详解
查看>>
【正则表达式】以个人的理解帮助大家认识正则表达式
查看>>
性能调优之iostat命令详解
查看>>
性能调优之iftop命令详解
查看>>
非关系型数据库(nosql)介绍
查看>>
移动端自动化测试-Windows-Android-Appium环境搭建
查看>>
Xpath使用方法
查看>>
移动端自动化测试-Mac-IOS-Appium环境搭建
查看>>