c/c++语言开发共享struct itimerspec as timer_create的参数无效参数

我正在尝试使用POSIX信号处理POSIX定时器。 当我尝试执行你可以找到的代码时,我得到:

Errore timer_settime:参数无效

在GAPIL上,这是基于高级Linux编程和Unix网络编程的,我读到这可能发生在new_value.value里面你指定了一个负时间值或者高于999999999的纳秒数。但我认为我使用过的参数没关系……

#include  #include  #include  #include  #include  #include  #include  #include  #include  #include  #include  #include  #include  #include  #include  #include  void termination_handler(int signum) { printf("Timer scaduton"); } int main() { timer_t timer1; struct sigevent sigeventStruct; sigeventStruct.sigev_notify = SIGEV_SIGNAL; sigeventStruct.sigev_signo = 10; if(timer_create(_POSIX_MONOTONIC_CLOCK, &sigeventStruct, &timer1) == -1) { printf( "Errore timer_create: %sn", strerror( errno ) ); } printf("timer_create eseguiton"); struct itimerspec tempoIniziale; tempoIniziale.it_value.tv_nsec = 0; struct itimerspec tempoFinale; tempoFinale.it_value.tv_nsec = 10000000; if(timer_settime(timer1, 0, &tempoIniziale, &tempoFinale) == -1) { printf( "Errore timer_settime: %sn", strerror( errno ) ); } struct sigaction newSigAzione, oldSigAzione; newSigAzione.sa_handler = termination_handler; //oldSigAzione.sa_handler = termination_handler; sigemptyset (&newSigAzione.sa_mask); newSigAzione.sa_flags = 0; sigaction (SIGEV_SIGNAL, NULL, &oldSigAzione); if(oldSigAzione.sa_handler != SIG_IGN) { //sigaction (SIGEV_SIGNAL, newSigAzione, NULL); } /*sigaction (SIGINT, NULL, &oldSigAzione); if (oldSigAzione.sa_handler != SIG_IGN) sigaction (SIGINT, &newSigAzione, NULL); sigaction (SIGHUP, NULL, &oldSigAzione); if (oldSigAzione.sa_handler != SIG_IGN) sigaction (SIGHUP, &newSigAzione, NULL); sigaction (SIGTERM, NULL, &oldSigAzione); if (oldSigAzione.sa_handler != SIG_IGN) sigaction (SIGTERM, &newSigAzione, NULL);*/ /*sigaction (SIGTERM, &newSigAzione, NULL);*/ return 0; } 

    _POSIX_MONOTONIC_CLOCK是一个function测试宏,可以告诉您系统上是否有单调时钟。

    您可以在Linux上传递给timer_create()的可用时钟ID是:

      CLOCK_REALTIME   系统范围的实时时钟。 设置此时钟需要适当的权限。  CLOCK_MONOTONIC   无法设置的时钟,表示自某些未指定的起点以来的单调时间。  CLOCK_PROCESS_CPUTIME_ID   来自CPU的高分辨率每进程计时器。  CLOCK_THREAD_CPUTIME_ID   特定于线程的CPU时钟。 

    您还必须初始化struct sigeventstruct itimerspec所有成员。 例如,您不在.tv_sec中设置.tv_sec,仅设置.tv_nsec ,这会在这些成员中生成垃圾值。

     ... memset(&sigeventStruct, 0, sizeof sigeventStruct); ... and struct itimerspec tempoFinale; memset(&tempoFinale, 0, sizeof tempoFinale); tempoFinale.it_value.tv_nsec = 10000000; 

      以上就是c/c++开发分享struct itimerspec as timer_create的参数无效参数相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/522099.html

      (0)
      上一篇 2020年12月9日
      下一篇 2020年12月9日

      精彩推荐