发新话题
打印

【求助】急急!! 请大家帮我看看--有关设置interval timer

【求助】急急!! 请大家帮我看看--有关设置interval timer

大家帮我看看
  q+ }- Z" w* z: n* Y2 S# r; `2 a在这个程序中我设置了 interval timer(ITIMER_REAL)
' g2 f* z4 }$ X& B7 S但是看不道预期的值/ w. I1 W' g% K7 ?" h
到底是怎么了?  I( o. u$ c# W- u
#include <stdio.h>
/ M' V- G$ H: L8 z! `1 g, n& X#include <unistd.h>
/ N% `4 L; W) P, ?#include <sys/time.h>
/ \. ?) h2 X# L% Y#include <signal.h>
0 D8 e( n4 e; ~% n4 W2 V#include <stdlib.h>
; q& P4 d3 M+ E: u# i. z) m
6 T$ R5 ]/ w* N6 Y3 N
int main(void)9 V* b9 W  Y6 [( q7 w9 D0 F! q
{
$ o  f2 |, T# J1 r void countdown(int);
4 t" c7 a3 ^6 \& w. M int set_ticker(int);) p4 J- E2 M, \
signal(SIGALRM,countdown);
6 u. u& k# n+ J! |) s& m if ( set_ticker(500) == -1)
6 S; d0 _+ M. r  s- F0 o* c4 r) D) E  perror("set_ticker");
" y8 |$ Y9 O8 k1 M0 a2 E1 S) W$ i! M8 b else3 L6 J4 g3 U$ ]- m  o) p5 t) }
   while(1)
8 W1 i/ D1 P# O3 |  pause();' ]3 i6 r9 q% j
$ Z: b9 I+ K/ w% ~3 [  A9 `
return 0;
) G% p8 n' \2 S# O1 t% F}
$ m3 k9 e" q4 f
6 {- N. _, y/ v- O
void countdown(int signum)  _. V4 C0 ]0 [' {) t0 ?3 M
{- q, X8 s; B2 l; O/ I
static int num = 10;/ g- A# j7 r; u/ ^1 U! w, r( N
printf("%d..",num--);
  H5 U7 i' w+ v+ }0 ` fflush(stdout);+ B  t& d- q9 A7 N! j9 c8 `- r
if (num < 0){6 E" |0 b. a4 ?0 e# v% Y+ S
  printf("DONE!\n");8 H! P' o& j( h  h5 H# R
  exit(0);
# B: V$ E& h# Z  H6 N: F6 m$ J- S }
6 P0 d3 [7 d; D# j3 H}

( C: X3 Y" O) t  c* C- I' X" @( m/ `. ^
/*7 Y0 W; g1 H' \$ J  Q
*se_ticker(num_of_miliseconds). r: F; Q/ N9 k" f
*arranges for interval timer to issue SIGALARMs at regular intervals* s% s/ \$ G  K
*retrun -1 on error,0 ok0 S  f2 Z1 ^4 a1 b
*arg in miliseconds,converted into whole seconds and micorseconds. e. {* f/ w' N2 Q+ R; U
*note:set_ticker(0) turns off ticker
! m$ B7 U4 K1 \6 U */

5 \5 X% k% W7 e
9 v% @0 Y: k. P; K: y7 c- q( Sint set_ticker(int n_msecs)8 `6 @8 A1 a# O% a5 [
{( h" M4 g' u5 h0 t+ i( R4 X
struct itimerval new_timeset;
4 ~  O, s  t$ X long n_sec,n_usecs;5 U! ~7 `: Q: o  q% o8 d, W) {
n_sec = n_msecs / 1000;% {- P! r6 U; Q3 i
n_usecs = (n_msecs % 1000) * 1000;! I! M% r" Q9 N" C  A8 t9 P
new_timeset.it_interval.tv_sec = n_sec;   /*int part */% J! j% D7 q# t& I% U  |
new_timeset.it_interval.tv_usec = n_usecs; " T: e9 `2 {# o! k8 F8 e
3 N* V( s* r7 `9 {
new_timeset.it_value.tv_sec = n_sec;
/ B, Q1 b3 J; E: k new_timeset.it_value.tv_sec = n_usecs;
# Y, v( N& z/ Q# K
return setitimer(ITIMER_REAL,&new_timeset,NULL);
3 V! Z2 E0 I' ^" V}8 W6 S5 t1 c; D6 A5 b

TOP

main()) h8 @  S! |; y7 T( j7 a4 X
{. b8 \1 y* M( E# d6 |
void countdown(int);
& A/ ]# g0 o4 _int set_ticker(int);
) o/ I. B' }' |- ^: p.....
* ~# [3 x8 G' T& }0 g2 W# Z0 h" M4 C这是什么意思?
上帝说,有问题,找GOOGLE 写程序是很神圣的事情!同样只是装系统,卖菜的大娘会的事情不见得就跟卖菜一样了。

TOP

main()
( v' ?9 q; E# ?1 g8 y2 G+ p. C* |{8 V% t: \4 O2 q8 u: N
void countdown(int);   / Z+ m% Q1 R$ f+ @4 l: @
int set_ticker(int);
; E: n2 H8 }% O/ @( T$ d$ K.....
5 Y0 b0 c* u: R, d2 c/ \; g+ m& P& p. e7 V! m
/* 这两个函数原形放在这里是启到声名作用(也就是我要显示调用它们) */- T& Z9 O4 Y# A. @0 w3 T( O1 i6 I) M
void countdown(int) 是信号处理函数" |! X2 V  C. L1 G7 K% d! n; T
set_ticker(int)是设置interval timer 的函数
$ U. T8 W5 l& O" V# K6 V2 `5 ^1 z我的问题是设置了interval timer却看不到预期植* U1 }6 i1 q8 J& F& s4 j& q
预期值应该是这样的:
. ~7 H2 ~' B, p( [7 K, R10..9..8..7..6..5..4..3..2..1..DONE!! ?3 I' x4 m* i1 M& f

& t, Y. C. P0 d
$ W3 @/ r& o! a$ w# S. {  x我把程序改为以下这样没有问题可以看到预期值  是不是我设置的interval timer有问题?  a# G4 h2 y4 \% l7 X6 G+ }; s

; I% w9 Q1 w5 I2 F0 W- p3 e#include <stdio.h>
; y$ w7 I6 b6 d! ^" V2 L#include <unistd.h>* F( N4 s' t7 h: S0 M8 g
#include <sys/time.h>- w1 [! P- w1 z6 o+ h  _; |
#include <signal.h>/ {" ^4 n) \6 q2 M1 m
#include <stdlib.h>
8 J* V* a# M8 N: e& T3 Z
- v' _: I5 E- b% ?int main(void)* \6 Z5 P7 n1 E8 P" N6 ~
{7 }. ^5 k. [0 S( ~2 S
void countdown(int);! k; G( V0 b: N: t
signal(SIGALRM,countdown);  R( V+ w. _% e/ X: V3 h
while(1){6 q6 i  P0 W' F7 y1 Y
             alarm(1);3 \/ _7 ^( S9 W* k4 Q2 ^- W- O* X
              pause();! a$ ]/ m2 G0 o
}# d  X4 Z: W. E6 _+ v& E0 |
return 0;$ {) U9 S# P5 Q" B7 N
}
# N8 b; h5 x1 B+ I! K9 z9 P/ w5 E7 E
void countdown(int signum)- k2 B, L2 x7 K, D) J- z5 H
{1 j& r# F4 x8 A1 U/ z
static int num = 10;
6 Y4 Q+ c1 I$ `( V# \/ i9 |9 lprintf("%d..",num--);! z% e. }& K! _! w2 j
fflush(stdout);, j+ S& @& ^- D, H0 H, U& l
if (num < 0){0 S* G2 `) l( z- ~/ t- k8 f
printf("DONE!\n");4 U9 q. T. a% L% o. I" f
exit(0);: o% \! M/ J8 }: D
}
( J1 ^4 F4 E9 B) `1 G4 }}

TOP

......还真不知道怎么说你好了,到底谁教你能这么写程序的?
上帝说,有问题,找GOOGLE 写程序是很神圣的事情!同样只是装系统,卖菜的大娘会的事情不见得就跟卖菜一样了。

TOP

你牛比
$ H4 p$ v3 R' @2 e5 Z, X6 H) L那你说该怎么写?
1 t. j+ G  h8 B就以上面的哪个例子.
2 A. `6 a* `1 t" a; r- T+ S' i有话可以直说!!
6 z: l0 q: m9 p4 `& ^  B4 s/ Z也可以发到我的邮箱里面来:dc502@163.com

TOP

我是直说了啊,不过是对牛弹琴而已,什么是声明什么是定义,怎么调用函数这些基本的概念和语法难道还要在这里讨论吗?
上帝说,有问题,找GOOGLE 写程序是很神圣的事情!同样只是装系统,卖菜的大娘会的事情不见得就跟卖菜一样了。

TOP

我来这论坛是抱着交流,学习的目的来的
* @% [' C: |7 `2 V不是来看别人怎么个"牛比"法
; Z; F# s0 y5 _9 c3 H( @, c( O我提出的问题(或提出的问题本身有问题)希望论坛上的人能真对问题本身提出解决的方法3 ]2 h+ n* V* h0 |6 B
而不是版主flag所说的"对牛对牛弹琴"...之类的.也许flag真的很牛比很牛比,对小问题根本看不上眼
0 r: Y' c) k; T+ {7 Y大家你们说是吧?& h) ^: ~% F) M1 H
3 O2 w; O( m# ~9 u! h7 [
会话少说,还是说提出的问题吧# B' f- }4 R- N; E8 `0 o

4 Y* p! W1 m/ B1 [; V3 d  q) a2 t1 _int main(void)
( L8 q6 U/ g$ g% {% P{
* E2 \8 q% w1 k3 w" W* T. I( ?& @9 i; \' z: i6 l
}

TOP

我来这论坛是抱着交流,学习的目的来的/ G$ K: l. ]$ f* Z7 X2 W+ J0 \7 Q% h
不是来看别人怎么个"牛比"法" J+ b: g1 E( f! E
我提出的问题(或提出的问题本身有问题)希望论坛上的人能真对问题本身提出解决的方法0 r6 g( u! s4 N$ B9 ?" g
而不是版主flag所说的"对牛对牛弹琴"...之类的.也许flag真的很牛比很牛比,对小问题根本看不上眼" V, p0 [; \( i, j# M( l$ \# w
大家你们说是吧?
6 ^+ R0 T6 T: H2 {) Q( _: b4 r, b0 C
$ l7 G: V% L5 w) l8 i6 o; l4 l会话少说,还是说提出的问题吧
/ m4 [& A6 K/ c# i  Z
( R8 ^+ p8 S7 H8 D# z3 z% nint main(void)
' Y; `$ R6 r1 E1 ?) d) [1 h- A{
! ~) L- W( F5 _" [, z. l    void countdown(int);          /* 我要在main中调用 countdown() 和set_ticker()两个函数
/ t$ _/ B+ N- F( T# ~0 [3 B3 c    int set_ticker(int);                 *我在这做的声明难道错误吗?. \! G6 }( M6 z5 A$ h) U" u" T
              .                                    *请大家帮我看看   
$ _2 _; l! W1 C" N: O              .                                    */      
& ^: ?) f( l0 k8 s  Q- y      return 0:* A( [: i6 m" z4 L3 E! ]
}: o0 N( Q6 @3 S( ^4 \  l$ |7 v

. Q2 e, e% F! n- x9 p& M, p7 q' |+ t8 t) v, f9 P) h

! q# `5 M1 b0 B& s$ {$ V鄙人对"定义"和"声明"的理解是:5 n# T1 w# ?& _  W: D) J" ?( f% F$ @
"定义"是对函数功能的确立,包括指定函数名,函数值类型,函数体等.
2 C' r: W, h0 [; z0 S/ e: k: O"声明"是把函数的名字,函数类型以及行参的类型,个数和顺序通知编译系统,以便在调用该函数时系统按此进行对照检查.
- v; V* w/ K7 q% d
1 O9 k9 R2 J" N" f8 Z0 ~$ [+ ~; G" Y$ }! i. n; h

" d) t/ E( {  f1 J" K" n. q: q+ s我在上面一开始提出的问题是,我设置了interval timer 却看不道我要得到的预期值
4 j2 N7 S0 L3 |" `$ P是不是我设置interval timer 有问题?还是错在哪里?
+ `1 f: J2 m: P上面的程序能编译通过,运行时的效果是一直处于pause()将进程挂起的状态

TOP

发新话题