billwillman

[转]Server的定时器该怎么做?(我是用SleepEx)


请教大家一下, server中的定时机制(timer)该怎么做 ?
当前,该论坛中首先显示的主题过多。要让该主题首先显示,请取消其他主题的这一选项。
处理您的请求时出错。请重试。
标记
  18 个帖子 - 全部显示
您要发布帖子的论坛是一个 Usenet 新闻组。在此论坛发帖会使您的电子邮件地址有机会给互联网上的所有人看到。
您的回复帖子尚未发送。
发帖成功
zephyr  
查看个人资料
 更多选项 2006年5月12日, 上午10时17分
发件人:"zephyr" <zephyr....@gmail.com>
日期:Fri, 12 May 2006 02:17:15 -0000
当地时间:2006年5月12日(星期五) 上午10时17分
主题:请教大家一下, server中的定时机制(timer)该怎么做 ?
请教大家一下, server中的定时机制(timer)该怎么做 ?
例如一些定时事件的触发:定时发keepalive,
检查socket是否很长时间没有数据,或者定时地广播一些消息等等。

在windows下可以直接用SetTimer,不过感觉比较不爽(要和窗口关联),
在无窗口的工作线程中有什么好的方法可以实现定时机制

在linux下怎么实现定时机制 ?

以前看过ACE, 好像是内部自己维护一个封装过的timer
Queue, 然后在线程中运行中检测是否到time-out
时间然后回调原先指定的timer
procedure。这种在用户级别的模拟timer实现是否会严重影响性能


    答复作者    转发  
您需要先登录才能发帖。
要发帖子,您需要先加入此论坛
请先在订阅设置页上更新您的昵称,然后再进行发帖。
您没有发帖的权限。
sunway  
查看个人资料
 更多选项 2006年5月12日, 上午10时24分
发件人:"sunway" <sunhui...@gmail.com>
日期:Thu, 11 May 2006 19:24:33 -0700
当地时间:2006年5月12日(星期五) 上午10时24分
主题:Re: 请教大家一下, server中的定时机制(timer)该怎么做 ?
ACE的做法是可取的。
自己模拟Timer只要控制的好不会影响性能。
很多系统定时器都有限制,比如多媒体定时器,限制为最大64个好像。
有空可以研究下linux下的系统定时器。

    答复作者    转发  
您需要先登录才能发帖。
要发帖子,您需要先加入此论坛
请先在订阅设置页上更新您的昵称,然后再进行发帖。
您没有发帖的权限。
Lee Alvin  
查看个人资料
 更多选项 2006年5月12日, 下午3时53分
发件人:"Lee Alvin" <alvin.gr...@gmail.com>
日期:Fri, 12 May 2006 15:53:32 +0800
当地时间:2006年5月12日(星期五) 下午3时53分
主题:Re: 请教大家一下, server中的定时机制(timer)该怎么做 ?
在 06-5-12,zephyr<zephyr....@gmail.com> 写道:

> 请教大家一下, server中的定时机制(timer)该怎么做 ?
> 例如一些定时事件的触发:定时发keepalive,
> 检查socket是否很长时间没有数据,或者定时地广播一些消息等等。

> 在windows下可以直接用SetTimer,不过感觉比较不爽(要和窗口关联),
> 在无窗口的工作线程中有什么好的方法可以实现定时机制
> ?

Win32可以使用使用定时器内核对象,CreateWaitableTimer,不和窗口循环关联。
请详见《Windows核心编程》九章四节。

> 在linux下怎么实现定时机制 ?

> 以前看过ACE, 好像是内部自己维护一个封装过的timer
> Queue, 然后在线程中运行中检测是否到time-out
> 时间然后回调原先指定的timer
> procedure。这种在用户级别的模拟timer实现是否会严重影响性能
> ?

--
Enjoy your life! Make things clearly and easier!
Reply Mailto: alvin....@gmail.com
My Blog: http://wolf.bloghome.cn

    答复作者    转发  
您需要先登录才能发帖。
要发帖子,您需要先加入此论坛
请先在订阅设置页上更新您的昵称,然后再进行发帖。
您没有发帖的权限。
Lee Alvin  
查看个人资料
 更多选项 2006年5月12日, 下午3时55分
发件人:"Lee Alvin" <alvin.gr...@gmail.com>
日期:Fri, 12 May 2006 15:55:51 +0800
当地时间:2006年5月12日(星期五) 下午3时55分
主题:Re: 请教大家一下, server中的定时机制(timer)该怎么做 ?
ACE应该也是用内核对象上的事件标志来做的,不可能是轮训,可以参考《ACE.Programmers.Guide》上面详细介绍了,ACE的高性能、高精度­的Timer。

--
Enjoy your life! Make things clearly and easier!
Reply Mailto: alvin....@gmail.com
My Blog: http://wolf.bloghome.cn


    答复作者    转发  
您需要先登录才能发帖。
要发帖子,您需要先加入此论坛
请先在订阅设置页上更新您的昵称,然后再进行发帖。
您没有发帖的权限。
christanxw  
查看个人资料
 更多选项 2006年5月13日, 下午4时20分
发件人:"christanxw" <christa...@gmail.com>
日期:Sat, 13 May 2006 01:20:20 -0700
当地时间:2006年5月13日(星期六) 下午4时20分
主题:Re: 请教大家一下, server中的定时机制(timer)该怎么做 ?
要实现定时器,无非就是轮询或中断,大多数系统实现的定时器都是轮询,而工业控制等对时间精度要求很高的实时操作系统一般都是用中断实现。

    答复作者    转发  
您需要先登录才能发帖。
要发帖子,您需要先加入此论坛
请先在订阅设置页上更新您的昵称,然后再进行发帖。
您没有发帖的权限。
Lee Alvin  
查看个人资料
 更多选项 2006年5月15日, 上午1时30分
发件人:"Lee Alvin" <alvin.gr...@gmail.com>
日期:Mon, 15 May 2006 01:30:15 +0800
当地时间:2006年5月15日(星期一) 上午1时30分
主题:Re: 请教大家一下, server中的定时机制(timer)该怎么做 ?
2006/5/13, christanxw <christa...@gmail.com>:
> 要实现定时器,无非就是轮询或中断,大多数系统实现的定时器都是轮询,而工业控制等对时间精度要求很高的实时操作系统一般都是用中断实现。

操作系统IO事件处理一般就是轮讯、中断、DMA、管道几种方式,操作系统内核态通常都是这样实现的。ACE为用户态的库,Timer框架的事件主要由ACE_­Timer_Queue来实现,分为ACE_Async_Timer_Queue_Adapter和ACE_Thread_Timer_Queue_Adapt­er来实现,内部分别使用ACE_Sig_Handler信号和ACE_Condition的超时来实现的。

    答复作者    转发  
您需要先登录才能发帖。
要发帖子,您需要先加入此论坛
请先在订阅设置页上更新您的昵称,然后再进行发帖。
您没有发帖的权限。
zephyr  
多谢各位的回复, 我打算再仔细看看ACE的做法, 可能的话模仿ACE的作法搞一套 :)
  2006年5月15日, 上午11时30分
您需要先登录才能发帖。
要发帖子,您需要先加入此论坛
请先在订阅设置页上更新您的昵称,然后再进行发帖。
您没有发帖的权限。
sunway  
查看个人资料
 更多选项 2006年5月15日, 下午2时03分
发件人:"sunway" <sunhui...@gmail.com>
日期:Sun, 14 May 2006 23:03:24 -0700
当地时间:2006年5月15日(星期一) 下午2时03分
主题:Re: 请教大家一下, server中的定时机制(timer)该怎么做 ?
win下的定时器有下面几种。
1,消息机制的,也就是你说的。
2,多媒体定时器 winmm.h中。
3,队列定时器,queue timer
4,CreateWaitableTimer定时器。
这几种我都用过,感觉queue timer最方便。

    答复作者    转发  
您需要先登录才能发帖。
要发帖子,您需要先加入此论坛
请先在订阅设置页上更新您的昵称,然后再进行发帖。
您没有发帖的权限。
zephyr  
查看个人资料
 更多选项 2006年5月16日, 下午1时24分
发件人:"zephyr" <zephyr....@gmail.com>
日期:Tue, 16 May 2006 05:24:15 -0000
当地时间:2006年5月16日(星期二) 下午1时24分
主题:Re: 请教大家一下, server中的定时机制(timer)该怎么做 ?
队列定时器,queue timer ?   我在网上搜了一把
竟然没有匹配的结果。

sunway :   你能否再说说队列定时器,queue timer 的用法 ?


    答复作者    转发  
您需要先登录才能发帖。
要发帖子,您需要先加入此论坛
请先在订阅设置页上更新您的昵称,然后再进行发帖。
您没有发帖的权限。
sunway  
查看个人资料
 更多选项 2006年5月16日, 下午1时53分
发件人:"sunway" <sunhui...@gmail.com>
日期:Mon, 15 May 2006 22:53:55 -0700
当地时间:2006年5月16日(星期二) 下午1时53分
主题:Re: 请教大家一下, server中的定时机制(timer)该怎么做 ?
CreateTimerQueueTimer() win32 api

    答复作者    转发  
您需要先登录才能发帖。
要发帖子,您需要先加入此论坛
请先在订阅设置页上更新您的昵称,然后再进行发帖。
您没有发帖的权限。
sunway  
查看个人资料
 更多选项 2006年5月16日, 下午1时35分
发件人:"sunway" <sunhui...@gmail.com>
日期:Mon, 15 May 2006 22:35:06 -0700
当地时间:2006年5月16日(星期二) 下午1时35分
主题:Re: 请教大家一下, server中的定时机制(timer)该怎么做 ?
CreateTimerQueueTimer...win32api,win2k...

    答复作者    转发  
您需要先登录才能发帖。
要发帖子,您需要先加入此论坛
请先在订阅设置页上更新您的昵称,然后再进行发帖。
您没有发帖的权限。
zephyr  
查看个人资料
 更多选项 2006年5月16日, 下午3时10分
发件人:"zephyr" <zephyr....@gmail.com>
日期:Tue, 16 May 2006 07:10:26 -0000
当地时间:2006年5月16日(星期二) 下午3时10分
主题:Re: 请教大家一下, server中的定时机制(timer)该怎么做 ?
多谢sunway  !

    答复作者    转发  
您需要先登录才能发帖。
要发帖子,您需要先加入此论坛
请先在订阅设置页上更新您的昵称,然后再进行发帖。
您没有发帖的权限。
漂舟  
查看个人资料
 更多选项 2006年5月17日, 上午8时55分
发件人:"漂舟" <piaozhou...@163.com>
日期:Tue, 16 May 2006 17:55:30 -0700
当地时间:2006年5月17日(星期三) 上午8时55分
主题:Re: 请教大家一下, server中的定时机制(timer)该怎么做 ?
都是高手啊,
偶是新来小菜,跟大家学习的

    答复作者    转发  
您需要先登录才能发帖。
要发帖子,您需要先加入此论坛
请先在订阅设置页上更新您的昵称,然后再进行发帖。
您没有发帖的权限。
破裤男人  
查看个人资料
 更多选项 2006年5月19日, 下午4时55分
发件人:"破裤男人" <webmas...@coders.com.cn>
日期:Fri, 19 May 2006 01:55:50 -0700
当地时间:2006年5月19日(星期五) 下午4时55分
主题:Re: 请教大家一下, server中的定时机制(timer)该怎么做 ?
看看Sleep可以吗?

    答复作者    转发  
您需要先登录才能发帖。
要发帖子,您需要先加入此论坛
请先在订阅设置页上更新您的昵称,然后再进行发帖。
您没有发帖的权限。
清风雨  
查看个人资料
(1 个用户)  更多选项 2006年5月22日, 上午10时58分
发件人:"清风雨" <zhangJW...@gmail.com>
日期:Sun, 21 May 2006 19:58:18 -0700
当地时间:2006年5月22日(星期一) 上午10时58分
主题:Re: 请教大家一下, server中的定时机制(timer)该怎么做 ?
我建议可以看看java实现定时器的java源码,然后可以自己写一个简单易用的(就自己的需求情况)。

    答复作者    转发  
您需要先登录才能发帖。
要发帖子,您需要先加入此论坛
请先在订阅设置页上更新您的昵称,然后再进行发帖。
您没有发帖的权限。
zephyr  
查看个人资料
 更多选项 2006年5月22日, 下午5时02分
发件人:"zephyr" <zephyr....@gmail.com>
日期:Mon, 22 May 2006 09:02:47 -0000
当地时间:2006年5月22日(星期一) 下午5时02分
主题:Re: 请教大家一下, server中的定时机制(timer)该怎么做 ?
java实现定时器的java源码 ?

能再提供一些更详细的信息么 ? 这个源代码在哪下载


    答复作者    转发  
您需要先登录才能发帖。
要发帖子,您需要先加入此论坛
请先在订阅设置页上更新您的昵称,然后再进行发帖。
您没有发帖的权限。
清风雨  
查看个人资料
 更多选项 2006年5月25日, 上午11时09分
发件人:"清风雨" <zhangJW...@gmail.com>
日期:Wed, 24 May 2006 20:09:19 -0700
当地时间:2006年5月25日(星期四) 上午11时09分
主题:Re: 请教大家一下, server中的定时机制(timer)该怎么做 ?
java.sun.com有下载的(实际上java的JDK里面的src.zip——选择安装源码)。

定时器的实现可以有最简单的方式:基于系统高精度时间轮询(采用这个方式的,比较适合游戏系统。我在gameres上有篇简单的思考介绍)。


    答复作者    转发  
您需要先登录才能发帖。
要发帖子,您需要先加入此论坛
请先在订阅设置页上更新您的昵称,然后再进行发帖。
您没有发帖的权限。
fytzzh@yahoo.com.cn  
查看个人资料
 更多选项 2006年6月5日, 下午7时57分
发件人:"fyt...@yahoo.com.cn" <fyt...@yahoo.com.cn>
日期:Mon, 05 Jun 2006 04:57:24 -0700
当地时间:2006年6月5日(星期一) 下午7时57分
主题:Re: 请教大家一下, server中的定时机制(timer)该怎么做 ?
使用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);
重新将定时插入链表

    答复作者    转发  
您需要先登录才能发帖。
要发帖子,您需要先加入此论坛
请先在订阅设置页上更新您的昵称,然后再进行发帖。
您没有发帖的权限。
帖子的结尾
发表于 2008-03-17 18:46  billwillman  阅读(1094)  评论(0编辑  收藏  举报
 

分类:

技术点:

相关文章: