2011-03-28 72 views
0

我有這個問題: 我已經創建了一個使用itimerspec結構的結構。該itimerspec結構有兩個字段:float value in - struct itimerspec

struct timespec { 
      time_t tv_sec;    /* Seconds */ 
      long tv_nsec;    /* Nanoseconds */ 
     }; 

     struct itimerspec { 
      struct timespec it_interval; /* Timer interval */ 
      struct timespec it_value;  /* Initial expiration */ 
     }; 

所以,當我進入:

enter code here 
    struct itimerspec its; // argument to timer_gettime 
     /* Setting timer interval */ 

     its.it_interval.tv_sec=0; 
     its.it_interval.tv_nsec=1; 

     /* Setting timer expiration */ 
     its.it_value.tv_sec=0.1; // First expiry after 1 sec 
     its.it_value.tv_nsec=0; 

    On compilation: 
     prototype1.cc:115: warning: converting to ‘__time_t’ from ‘double’ 

我的問題是:按照設計,用戶可以在全數字(1進入計時器到期,2 ,3等),但也可以輸入時間如0.1秒,o.2秒等,但僅在幾秒鐘內。

回答

1

你將不得不調整到秒和nanosecs,例如0.1秒= 0秒和100,000秒。

+0

好吧,你的意思是0.1秒= 10 ^(8)nsecs。這是可以接受的解決方案。但是,有沒有直接的方式來填補這一點? – kingsmasher1 2011-03-28 06:41:15

+0

@ kingsmasher1:timespec允許您以毫微秒的精度指定任何時間。只需輸入秒和納秒分別爲tv_sec和tv_nsec。 – rturrado 2011-03-28 06:53:38

+0

請參閱此鏈接:http://stackoverflow.com/questions/5457489/second-to-nanosecond-struct-itimerspec。我現在正面臨一個新問題,使用上述轉換。 – kingsmasher1 2011-03-28 10:18:06

1

您不能將double賦給long val。如果你需要少於1秒,你應該用usec來表達它。

0.1秒= 100000微秒

務必:

its.it_value.tv_sec=0; // First expiry after 1 sec 
its.it_value.tv_nsec= 0.1 * (usec in sec); 
+0

@Overbose:怎麼樣?但itimerspec不採用usec。 itimerspec是timer_settime所必需的。 – kingsmasher1 2011-03-28 06:34:20

+0

@Overbose:這是itimerspec的原型:long sys_timer_settime(timer_t timer_id,int flags,const struct itimerspec * new_setting,struct itimerspec * old_setting); – kingsmasher1 2011-03-28 06:35:48

+0

ITYM *分配*? (或者至少我希望你能做到!)。 – 2011-03-28 07:01:51