zoukankan      html  css  js  c++  java
  • linux信号量及计时器

    下面是一个关于linux信号量和计时器的例子。

     

      1 #include <signal.h>
      2 #include <sys/time.h>
      3 #include <sys/errno.h>
      4 #include <cstring>
      5 #include <iostream>
      6 using namespace std;
      7 
      8 void handle_sig(int dunno)
      9 {
     10     cout << "get a signal: ";
     11     unsigned uRet = 0;
     12     switch(dunno)
     13     {
     14         case SIGHUP:
     15             cout << "SIGHUP" << endl;
     16             break;
     17         case SIGINT:
     18             cout << "SIGINT" << endl;
     19             break;
     20         case SIGQUIT:
     21             cout << "SIGQUIT" << endl;
     22             break;
     23         case SIGALRM:
     24             //uRet = alarm(2);
     25             //cout << "alarm ret " << uRet << endl;
     26             cout << "SIGALRM" << endl;
     27             break;
     28         default:
     29             cout << dunno << endl;
     30             break;
     31     }
     32 }    
     33 
     34 void SetMyTimer(int witch, long nSecs, long nUSecs, bool bRepeat)
     35 {
     36     struct itimerval oThis, oPre;    
     37     memset(&oThis, 0, sizeof(oThis));
     38     memset(&oPre, 0, sizeof(oPre));
     39 
     40     oThis.it_value.tv_sec = nSecs;
     41     oThis.it_value.tv_usec = nUSecs;
     42     //oThis.it_interval.tv_sec = 0;
     43     //oThis.it_interval.tv_usec = 0;
     44     
     45     if(bRepeat)
     46     {
     47         oThis.it_interval.tv_sec = nSecs;
     48         oThis.it_interval.tv_usec = nUSecs;
     49     }
     50 
     51     //oPre.it_value.tv_sec = 0;
     52     //oPre.it_value.tv_usec = 0;
     53     //oPre.it_interval.tv_sec = 0;
     54     //oPre.it_interval.tv_usec = 0;
     55 
     56     int nRet = setitimer(witch, &oThis, &oPre);
     57     cout << "setitimer ret " << nRet << endl;
     58     
     59     if(-1 == nRet)
     60     {
     61         cout << "errno " << errno << endl;
     62         return;
     63     }
     64     
     65     cout << "pre timer:" << endl;
     66     cout << "it_interval.tv_sec:" << oPre.it_interval.tv_sec << endl;
     67     cout << "it_interval.tv_usec:" << oPre.it_interval.tv_usec << endl;
     68     cout << "it_value.tv_sec:" << oPre.it_value.tv_sec << endl;
     69     cout << "it_value.tv_usec:" << oPre.it_value.tv_usec << endl;
     70 }
     71 
     72 int main()
     73 {
     74     cout << "process id is " << getpid() << endl;
     75     cout << "SIG_IGN : " << SIG_IGN << endl;
     76     cout << "SIG_DFL: " << SIG_DFL << endl;
     77 
     78     sig_t ret = signal(SIGHUP, handle_sig);
     79     if(ret != SIG_ERR)
     80     {
     81         cout << ret << endl;
     82     }
     83     
     84     ret = signal(SIGINT, handle_sig);
     85     if(ret != SIG_ERR)
     86     {
     87         cout << ret << endl;
     88     }
     89 
     90     ret = signal(SIGQUIT, handle_sig);
     91     if(ret != SIG_ERR)
     92     {
     93         cout << ret << endl;
     94     }
     95 
     96     ret = signal(SIGALRM, handle_sig);
     97     if(ret != SIG_ERR)
     98     {
     99         cout << ret << endl;
    100     }
    101 
    102     //unsigned uRet = alarm(2);
    103     //cout << "alarm ret " << uRet << endl;
    104     
    105     SetMyTimer(ITIMER_REAL, 1, 0, true);
    106 
    107     while(true)
    108     {
    109         int nRet = pause();
    110         cout << "nRet = " << nRet << endl;
    111     }
    112     
    113     return 0;
    114 } 
  • 相关阅读:
    .NET Interop 工具集
    关于正弦波的算法
    Windows Phone 系列 本地数据存储
    Xaml cannot create an instance of “X”
    Windows Phone 系列 使用 MVVM绑定时无法获取当前值
    Windows Phone 系列 应用程序图标无法显示
    Windows Phone 系列 WPConnect无法上网的问题
    Windows Phone 系列 使用 Windows Phone 保存铃声任务
    WP7.5提交应用
    Windows Phone 系列 动态删除ObservableCollection
  • 原文地址:https://www.cnblogs.com/yeta/p/2689848.html
Copyright © 2011-2022 走看看