线程中设置SIGALRM信号问题

时间变 发布于 2013/09/06 09:50
阅读 348
收藏 0
以下代码中,会如何运行呢?会sleep多少秒呢?
结果显示,子线程设置信号处理函数,本身并没有超时退出,但却导致主线程退出。


我希望子线程退出,这个怎么实现呢?

#include <pthread.h>
#include <stdio.h>
#include <signal.h>

int iTimeout = 3;
void mRecv();
static void _mTimeout_r()
{
    alarm(0);
    signal(SIGALRM,SIG_DFL);
}

int main()
{
    pthread_t pid;
    pthread_create(&pid,NULL,(void*)mRecv,NULL);

    printf("the main thread begin waiting....\n");
    sleep(50);
    printf("the main thread after wait 50s.....\n");
    pthread_join(pid,NULL);

    return 0;
}

void bmqRecv()
{
    printf("q recv\n");
    if(iTimeout != 0)
    {   
        signal(SIGALRM,_mTimeout_r);
        alarm(iTimeout);
    }   
    printf("begin recv and child thread begin sleep 100s\n");
    sleep(100);
    printf("after 100s end recv\n");
    if(iTimeout != 0)
    {   
        alarm(0);
        signal(SIGALRM,SIG_DFL);
    }

}

加载中
返回顶部
顶部