setitimer - 未发出SIGALRM

时间:2018-01-10 08:29:40

标签: c++ timer signals c++03

我在两个不同的环境中运行下面的代码:单独和其他二进制文件。我的问题是我用setitimer设置的计时器单独工作(有一个主类和没有类)但在第二个环境中它达到0并且根本没有任何事情发生。没有发出SIGALRM,也没有重置为 interval 。我的代码的目标是当我调用启动函数并在停止函数上停止计时器(以及线程的启动)时,能够在每个间隔启动线程。
我的代码:

Foo::Foo()
{
    signal(SIGALRM, launchThreads);
}

Foo::launchThreads(int signum)
{
    pthread_t thread;
    pthread_create(&thread, NULL, threadFunc, NULL);
}

Foo::threadFunc()
{
    (...)
    pthread_exit(NULL);
}

Foo::start()
{
    itimerval it_val;
    it_val.it_value.tv_sec = 5;
    it_val.it_value.tv_usec = 0;
    it_val.it_interval = it_val.it_value;
    setitimer(ITIMER_REAL, &it_val, NULL);
}

Foo::stop()
{
    itimerval it_val;
    it_val.it_value.tv_sec = 0;
    it_val.it_value.tv_usec = 0;
    it_val.it_interval = it_val.it_value;
    setitimer(ITIMER_REAL, &it_val, NULL);
}

我删除了一些错误检查和代码以便于阅读。 SIGALRM掩码在进程中正确设置(cat / proc / nb / status),并且我的其他进程没有使用setitimer或SIGALRM(也没有捕获此信号)。
我用gdb附加它并尝试处理SIGALRM但是当计时器达到0时没有打印 输入问题的示例:

Timer value    : 5-0  
Timer interval : 5-0
Timer value    : 3-349629  
Timer interval : 5-0
Timer value    : 1-152755  
Timer interval : 5-0
Timer value    : 0-0  
Timer interval : 5-0
Timer value    : 0-0  
Timer interval : 5-0

0 个答案:

没有答案