[转]Server的定时器该怎么做?(我是用SleepEx)
|
|
|
18 个帖子 - 全部显示 |
请教大家一下, server中的定时机制(timer)该怎么做 ?
例如一些定时事件的触发:定时发keepalive, 检查socket是否很长时间没有数据,或者定时地广播一些消息等等。 在windows下可以直接用SetTimer,不过感觉比较不爽(要和窗口关联), 在linux下怎么实现定时机制 ? 以前看过ACE, 好像是内部自己维护一个封装过的timer 您需要先登录才能发帖。
要发帖子,您需要先加入此论坛。
请先在订阅设置页上更新您的昵称,然后再进行发帖。
您没有发帖的权限。
|
||||||||||||||
在 06-5-12,zephyr<zephyr....@gmail.com> 写道:
> 请教大家一下, server中的定时机制(timer)该怎么做 ?
Win32可以使用使用定时器内核对象,CreateWaitableTimer,不和窗口循环关联。 > 例如一些定时事件的触发:定时发keepalive, > 检查socket是否很长时间没有数据,或者定时地广播一些消息等等。 > 在windows下可以直接用SetTimer,不过感觉比较不爽(要和窗口关联), 请详见《Windows核心编程》九章四节。
> 在linux下怎么实现定时机制 ? > 以前看过ACE, 好像是内部自己维护一个封装过的timer Enjoy your life! Make things clearly and easier! Reply Mailto: alvin....@gmail.com My Blog: http://wolf.bloghome.cn 您需要先登录才能发帖。
要发帖子,您需要先加入此论坛。
请先在订阅设置页上更新您的昵称,然后再进行发帖。
您没有发帖的权限。
|
||||||||||||||
ACE应该也是用内核对象上的事件标志来做的,不可能是轮训,可以参考《ACE.Programmers.Guide》上面详细介绍了,ACE的高性能、高精度的Timer。
-- 您需要先登录才能发帖。
要发帖子,您需要先加入此论坛。
请先在订阅设置页上更新您的昵称,然后再进行发帖。
您没有发帖的权限。
|
||||||||||||||
2006/5/13, christanxw <christa...@gmail.com>:
> 要实现定时器,无非就是轮询或中断,大多数系统实现的定时器都是轮询,而工业控制等对时间精度要求很高的实时操作系统一般都是用中断实现。
操作系统IO事件处理一般就是轮讯、中断、DMA、管道几种方式,操作系统内核态通常都是这样实现的。ACE为用户态的库,Timer框架的事件主要由ACE_Timer_Queue来实现,分为ACE_Async_Timer_Queue_Adapter和ACE_Thread_Timer_Queue_Adapter来实现,内部分别使用ACE_Sig_Handler信号和ACE_Condition的超时来实现的。 您需要先登录才能发帖。
要发帖子,您需要先加入此论坛。
请先在订阅设置页上更新您的昵称,然后再进行发帖。
您没有发帖的权限。
|
||||||||||||||
win下的定时器有下面几种。
1,消息机制的,也就是你说的。 2,多媒体定时器 winmm.h中。 3,队列定时器,queue timer 4,CreateWaitableTimer定时器。 这几种我都用过,感觉queue timer最方便。 您需要先登录才能发帖。
要发帖子,您需要先加入此论坛。
请先在订阅设置页上更新您的昵称,然后再进行发帖。
您没有发帖的权限。
|
||||||||||||||
您需要先登录才能发帖。
要发帖子,您需要先加入此论坛。
请先在订阅设置页上更新您的昵称,然后再进行发帖。
您没有发帖的权限。
|
||||||||||||||
java.sun.com有下载的(实际上java的JDK里面的src.zip——选择安装源码)。
定时器的实现可以有最简单的方式:基于系统高精度时间轮询(采用这个方式的,比较适合游戏系统。我在gameres上有篇简单的思考介绍)。 您需要先登录才能发帖。
要发帖子,您需要先加入此论坛。
请先在订阅设置页上更新您的昵称,然后再进行发帖。
您没有发帖的权限。
|
||||||||||||||
使用POSIX线程中的条件变量实现定时.
pthread_cond_timewait 可以实现纳秒级的超时.维护一个链表,每次插入新的请求的时,对链表进行排列. 用一个线程处理链表(alarm_list)中的定时。 比如: while (alarm_list == NULL) { status = pthread_cond_wait (&alarm_cond, &alarm_mutex); ... ... }
如果在等待的时候,有新的定时请求,则要取消此次status = pthread_cond_wait (&alarm_cond, &alarm_mutex); 重新将定时插入链表 您需要先登录才能发帖。
要发帖子,您需要先加入此论坛。
请先在订阅设置页上更新您的昵称,然后再进行发帖。
您没有发帖的权限。
|
||||||||||||||
| 帖子的结尾 |