发新话题
打印

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

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

大家帮我看看; E: c5 }8 O) Y3 D+ F) x; a
在这个程序中我设置了 interval timer(ITIMER_REAL)( N- J( ~% n3 V  Q8 w
但是看不道预期的值! J* g+ e0 [& I5 H+ Y" o
到底是怎么了?
; e2 m$ i# H3 a) H2 f#include <stdio.h>
& v- h# h( u  D  T' g#include <unistd.h>8 n" d8 r6 A+ [
#include <sys/time.h>
( h. q& G+ L' A- n& |' [#include <signal.h>1 ?1 J9 Q! W, F. a$ ]7 M
#include <stdlib.h>
4 A; @5 n0 ~6 ]) k. e* o

" T! |* e; [1 r& m7 |- \int main(void), w" H$ [8 G9 y9 i& T) M4 C! E+ K
{7 z0 Y6 A0 {. m' K
void countdown(int);. `8 k) @% e/ S! v
int set_ticker(int);
: s8 Y/ I7 i: A+ U signal(SIGALRM,countdown);
1 Z# G7 E  o* ^2 J0 ~+ D" k/ V if ( set_ticker(500) == -1)
# d( Y/ F; v1 p0 K+ \& D" `& Q  n  perror("set_ticker");
- M# F) q( x! ]* b$ K$ o) C else0 d# g4 N1 H  B- Z: J/ f6 `; ?& M  ]8 o% A
   while(1)/ \  M' p$ N5 X5 s/ `+ u; _; ~
  pause();" M; U2 S5 e- g2 k

0 a' T0 e6 m* T' B  j* k; m  V return 0;
, n4 l7 f" Z* |1 _4 ~+ Y" Z3 F}

1 E% ]& g5 u- G; y1 P9 E; p) |6 c4 t  `- j, d! r8 \; k6 H/ ?
void countdown(int signum); `# v' T" B4 b7 f; C- K; c; q
{
+ Y, t- w6 ]4 R0 x+ o static int num = 10;
( R+ x* n+ @4 S' D) r+ o2 A printf("%d..",num--);! M+ L' e3 k% ]2 w. A( Q! |$ R$ s6 g% [
fflush(stdout);8 @7 F2 C/ c) @! z' h
if (num < 0){( H( L# k( i4 r+ c
  printf("DONE!\n");( R1 S; V4 f- t' V6 |0 M6 R7 |
  exit(0);
: y) \" g1 F+ r2 x0 T& i }" y, L7 A0 b' A& C
}
0 A1 C4 @1 U8 B

# V% i9 Q  _8 X6 y8 R/*  y3 x/ o# `3 v. t
*se_ticker(num_of_miliseconds)0 m2 c- @' ?" v" k( [8 `
*arranges for interval timer to issue SIGALARMs at regular intervals3 r- K' \4 e( j) [: R
*retrun -1 on error,0 ok
9 A- N7 s  j* o7 h *arg in miliseconds,converted into whole seconds and micorseconds
4 }, p7 m2 j5 v) U *note:set_ticker(0) turns off ticker # O) m0 g2 u: `
*/

4 g( A' }; W' C- P
, s, {" o- g0 t5 rint set_ticker(int n_msecs)
/ h; w; j! a! A" @! |{" x/ V$ v" R8 Y* a
struct itimerval new_timeset;
& d% Y! e" O6 G7 [ long n_sec,n_usecs;
7 G' Q# b, ^5 Q& V/ V& T+ m: r/ M n_sec = n_msecs / 1000;
5 G9 X$ p0 ^( H5 m3 R n_usecs = (n_msecs % 1000) * 1000;- ?# X. W# i3 }  O) S1 x) P1 ?
new_timeset.it_interval.tv_sec = n_sec;   /*int part */0 W0 }" M* r0 Q. i
new_timeset.it_interval.tv_usec = n_usecs;
5 t# K( V. p9 V6 A1 I1 N
# R/ E& j+ @2 P; D5 V5 {6 t1 e* \ new_timeset.it_value.tv_sec = n_sec;
: c9 n. F- f9 u# l( N new_timeset.it_value.tv_sec = n_usecs;
3 v* l5 h8 y! t2 b* }4 ^) Q* e. ?& e
return setitimer(ITIMER_REAL,&new_timeset,NULL);
" M  m, |8 m  F/ g6 V1 P$ U}- V" `) C6 S2 t1 B' b( |* e; N
      

TOP

main()( h$ W. H. L8 @* s" b
{
- a1 ?& a" b/ T8 c7 Q7 Xvoid countdown(int);9 M, X- `  h" _8 [
int set_ticker(int);0 i7 R5 G7 K: c6 D0 U: i
.....$ t; f0 t- u4 L) H) D
这是什么意思?      
上帝说,有问题,找GOOGLE 写程序是很神圣的事情!同样只是装系统,卖菜的大娘会的事情不见得就跟卖菜一样了。

TOP

main()" D' S5 y3 O6 D, J" l# h8 V& V2 s
{% C0 r% Q6 Z0 H1 ]$ ~% A/ p/ ]
void countdown(int);   
! K, w6 e. y4 ^! M( X: C  Oint set_ticker(int);
) F+ m# \  _! V: [" |.....
: U; C- }% K5 q% i- x
  R; B! t+ k5 D4 w7 P) i/* 这两个函数原形放在这里是启到声名作用(也就是我要显示调用它们) */
. Z: \9 V0 f4 `2 Y! L4 }( Uvoid countdown(int) 是信号处理函数$ s$ K1 m+ Q/ W4 x, T: f4 D
set_ticker(int)是设置interval timer 的函数1 G7 H4 i1 f2 J9 e
我的问题是设置了interval timer却看不到预期植
. z/ }7 w8 [% X- l- Q. I预期值应该是这样的:
% H- B: d; H9 |' ?10..9..8..7..6..5..4..3..2..1..DONE!
- b7 T9 R  z  u' f2 W0 O
6 c" R0 h7 z4 o7 T
/ ?7 e/ g0 }1 j/ S, j5 _/ I我把程序改为以下这样没有问题可以看到预期值  是不是我设置的interval timer有问题?( E& D' G6 V& R0 o4 Z# y  I

! T. D; F& w, W: s#include <stdio.h>7 d( g( }; t- r! Z$ T6 z
#include <unistd.h>
. B3 c2 n, O8 \4 V0 l; I; }#include <sys/time.h>4 k, G/ B8 }+ z# x$ A4 Q7 T( f
#include <signal.h>) l! t! j; P! \7 b8 U6 Q
#include <stdlib.h>
# U  q( J! u0 V$ B- j
$ b& _9 e1 @8 {# Lint main(void)
- R% O$ u- [  w: u- |3 e: E{
* \0 b: L9 }, k# J' Lvoid countdown(int);! \; {, P- \* x2 ^( {4 x, O/ J% K
signal(SIGALRM,countdown);
) S) ?5 L/ H0 V( X5 ewhile(1){
9 ^( ^0 }) F( h1 A* @, x6 i             alarm(1);$ r- J  I% p8 B- e' r
              pause();/ F3 N1 o2 a( l1 ?2 b, W
}
# ?& i- _2 L  l( ireturn 0;
/ T9 l& A9 K  t2 X1 L# P- i/ v0 T}
. s. w& M  K0 s. g# T9 L
. e# Z- v5 F2 v) ^8 H( _void countdown(int signum), Z% k( k/ E' f
{
* V- L* A( x, r& f( Gstatic int num = 10;
4 u+ J2 ]$ g: d8 I0 iprintf("%d..",num--);
/ h) F; U- e% d2 f( Cfflush(stdout);; n. o/ ~6 `$ t- C8 H- G' p
if (num < 0){0 A4 B8 {8 ~5 A. J% a
printf("DONE!\n");; g  G* h* i5 h6 O- p( m
exit(0);2 V! f# h7 v/ @6 o7 l1 k" p4 B
}
- [3 f; Y; m- m* C( C}      

TOP

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

TOP

你牛比* X% p# g  k3 }/ M3 V5 ?+ ]
那你说该怎么写?! e6 h: n0 C5 W7 M- n( ~# p
就以上面的哪个例子.7 J6 E. z3 |3 U! ]9 q/ `
有话可以直说!!1 g: T; w! ]* j" ]1 G
也可以发到我的邮箱里面来:dc502@163.com      

TOP

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

TOP

我来这论坛是抱着交流,学习的目的来的& Y* P/ j" \" k8 P4 e
不是来看别人怎么个"牛比"法
8 m: l$ Q' Q" x- a8 F  z" `) Z9 h我提出的问题(或提出的问题本身有问题)希望论坛上的人能真对问题本身提出解决的方法
1 D; g4 t% p& Z4 u1 C1 }6 F3 [* j& j+ r而不是版主flag所说的"对牛对牛弹琴"...之类的.也许flag真的很牛比很牛比,对小问题根本看不上眼
0 {, m6 j- C6 K' Q, g大家你们说是吧?$ D& z. `. H3 h0 J! W0 q* I  ]/ P; X
- H, t9 ~, e9 q. t9 g2 B. f* N
会话少说,还是说提出的问题吧
3 u2 e3 \3 Q: Q! K2 M9 ^+ |- S( j: j& C' l- Y& Q
int main(void)  f2 d: R$ W: [9 o
{  @, T; F/ r5 i9 T/ v2 S" m' @
9 {2 Z/ `* r) ~" Z9 a5 W$ X4 p, ~
}      

TOP

我来这论坛是抱着交流,学习的目的来的
8 t1 O( b& p4 `! c不是来看别人怎么个"牛比"法, ]* Z4 \3 E" O3 Y( O# _$ R3 A5 w
我提出的问题(或提出的问题本身有问题)希望论坛上的人能真对问题本身提出解决的方法
  x$ H! |+ u$ x$ |; o而不是版主flag所说的"对牛对牛弹琴"...之类的.也许flag真的很牛比很牛比,对小问题根本看不上眼
$ }- |+ e1 X* E3 E1 d+ Z+ w7 v* r大家你们说是吧?9 S0 B) j( O  X  \" ~

' m6 r9 S# U9 U8 u9 A会话少说,还是说提出的问题吧
# F8 |" z; @* ]& ~& {: L7 x
) {: L6 B3 v3 d3 j, l  zint main(void)4 v- q5 N6 S/ u
{- h& l3 @. c& f# `1 C
    void countdown(int);          /* 我要在main中调用 countdown() 和set_ticker()两个函数
* N9 v6 Y* z" V# W( ^    int set_ticker(int);                 *我在这做的声明难道错误吗?& u7 f0 V3 o2 W% @0 F4 z) P! k
              .                                    *请大家帮我看看   
+ ~  C2 i" Y- A7 ^. }              .                                    */      2 f* K6 n1 A9 D+ R
      return 0:& q9 Z; }7 s+ S7 r7 S# h
}: f( r& A6 \) G& I/ D! Q% L

& J2 P7 Y+ i, Y+ k. j" g: x) C) ]3 _: c3 n: d

% a" R: A. L, @3 h鄙人对"定义"和"声明"的理解是:
* U/ I& O6 D  u9 i6 G/ {"定义"是对函数功能的确立,包括指定函数名,函数值类型,函数体等.
' d  M& Y- r: c"声明"是把函数的名字,函数类型以及行参的类型,个数和顺序通知编译系统,以便在调用该函数时系统按此进行对照检查.
! Z. o0 e! J" |0 Z; G) r0 n; E# p( R2 P
# y& R% m4 V( M" ~
) y% o& E) U# A/ |  n& P
我在上面一开始提出的问题是,我设置了interval timer 却看不道我要得到的预期值
7 w9 ?) `0 k9 u: B5 F( |4 \是不是我设置interval timer 有问题?还是错在哪里?
$ E" M) r7 n7 x上面的程序能编译通过,运行时的效果是一直处于pause()将进程挂起的状态      

TOP

发新话题