Linux下 sleep函数的注意事项

在Linux环境中,SIGALRM信号可以中断同一线程中的sleep()函数,但无法影响子线程的休眠。当使用timer_settime()设置的定时器间隔为1秒时,sleep(5)会被多次打断,导致无法完成完整的5秒休眠。
摘要由CSDN通过智能技术生成
1. 休眠sleep(unsigned int)为线程内操作 
  所以如果不同线程,信号量SIGALRM是不能中断sleep();
 
  编写程序进行测试

//timercreate_demo.cpp
#include <unistd.h> 
#include <stdio.h>
#include <signal.h>
#include <time.h>
#include <pthread.h>  

void SignHandler(int iSignNo);
void testTimerSign();
void printTime();
void *function(void *arg);

int main() {
    pthread_t thread1;  
    pthread_create(&thread1,NULL,function,(char*)"111"); 
    testTimerSign();
    while(true);
    return 0; 
}

void SignHandler(int iSignNo){
    if(iSignNo == SIGUSR1){
        printf("Capture sign no : SIGUSR1\n"); 
    }else if(SIGALRM == iSignNo){
        //printf("Capture sign no : SIGALRM\n"); 
    }else{
        printf("Capture sign no:%d\n"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值