Solaris下有什么好的方法使延时小于1秒?

lixuyu 2002-07-08 08:41:43
要求精确度较高。多谢了。
...全文
30 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
ximenes_nj 2002-07-11
  • 打赏
  • 举报
回复
usleep可能会进程CORE DUMP,建议不要使用,可以用setitimer
struct itimerval it;
it.it_interval.tv_sec = 0;
it.it_interval.tv_usec = 10;
it.it_value.tv_sec=0;
it.it_value.tv_usec = 10;
setitimer(ITIMER_REAL,&it,NULL);
将睡眠10MS
ajiefudan 2002-07-11
  • 打赏
  • 举报
回复
就试试usleep吧
lixuyu 2002-07-11
  • 打赏
  • 举报
回复
注:ITIMER_REAL是没这种问题的,但是我需要ITIMER_REALPROF
lixuyu 2002-07-11
  • 打赏
  • 举报
回复
我是在多线程环境里面使用setitimer,所以用了ITIMER_REALPROF,而不是ITIMER_REAL,发现有这样一个问题:每一个间隔到来的SIGPROF信号居然有3个?!所以就出现了上面提到过的请况:延时6000次的时间是20秒而不是60秒!

郁闷。。。
lixuyu 2002-07-09
  • 打赏
  • 举报
回复
1、用select或者poll误差太大(每次延时10MS,调用6000次,理想状况是60s,但
实际却是105秒左右);

2、我用的是SOLARIS 8, 好象没有udelay ? SOLARIS 8下倒是有个usleep,但是usleep据说是一个过时函数,建议是用setitimer,用了一下setitimer,但是定时10MS,执行6000次的时间却是20秒(理想状况60秒) ?
哪位DX用过 setitimer ?

peon 2002-07-08
  • 打赏
  • 举报
回复
udelay
wjf 2002-07-08
  • 打赏
  • 举报
回复
timeval tm;
tm.tv_sec = millisec / 1000;
tm.tv_usec = (millisec % 1000) * 1000;
select(0, 0, 0, 0, &tm);

19,612

社区成员

发帖
与我相关
我的任务
社区描述
系统使用、管理、维护问题。可以是Ubuntu, Fedora, Unix等等
社区管理员
  • 系统维护与使用区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧