`

多线程中,(实时)信号(转载)

    博客分类:
  • c++
阅读更多

#include <signal.h>
#include <pthread.h> 
#include <stdio.h>
  void intr(int sig,siginfo_t *info,void *context)
  {
          printf("caught by %d\n",pthread_self());
  }
 
 
 
    void * thread(void * arg)
    {
    //安装一个SIGINT信号处理
   
         struct sigaction st;
            sigemptyset(&st.sa_mask);
            st.sa_flags = SA_SIGINFO;
            st.sa_handler = intr;
            sigaction(SIGINT, &st, NULL);
                                  

          int ret ;
          while ( 1 )
         {
              ret = sleep(10);
              if(ret)
                      printf("interrupted\n");
             
        }
   }
  
   main()
   {
           pthread_t tid;
           sigset_t    mask,oldmask;
                setbuf(stdout,0);
           printf("parent is %d\n",pthread_self());
           pthread_create(&tid,0,thread,0);
    sigemptyset(&mask);
    sigaddset(&mask, SIGINT);
    if (pthread_sigmask(SIG_BLOCK, &mask, &oldmask))
        printf("SIG_BLOCK error\n");

    sleep(200)    ;
  }


请注意红色代码,要在主线程里面阻塞sigint,这样ctrl+c就会把信号发给子线程了

 

 

分享到:
评论

相关推荐

    C++多线程详解

    在C++编程中,多线程技术是一种强大的工具,它允许程序同时执行多个任务,从而提高了效率和响应性。本文将深入探讨C++中的多线程,并解释如何创建、管理和同步线程,以及讨论相关的重要概念。 首先,C++11引入了...

    python多线程下信号处理程序示例

    python多线程中要响应Ctrl+C的信号以杀死整个进程,需要: 1.把所有子线程设为Daemon; 2.使用isAlive()函数判断所有子线程是否完成,而不是在主线程中用join()函数等待完成; 3.写一个响应Ctrl+C信号的函数,修改...

    可扩展多线程异步Socket服务器框架EMTASS

    "【转载】可扩展多线程异步Socket服务器框架EMTASS 2_0 - 个人开发历程知识库 - 博客园.mht"来看,这可能是一个关于EMTASS框架的详细教程或开发者笔记,记录了作者在开发2.0版本过程中遇到的问题、解决方案以及改进...

    boost 线程库的应用例子, 罗大侠的书本配例,基于1.52

    Boost库,作为C++的一个重要扩展库,提供了大量的高效、实用的工具,其中线程库(thread)是其核心部分之一,广泛用于多线程编程。本文将通过罗剑锋先生的书本配例,基于Boost 1.52.0版本,详细探讨如何在Visual ...

    易语言真正的线程池简易实现

    易语言简易线程池的实现。...线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池线程都是后台线程。每个线程都使用默认的堆栈大小,以默认的优先级

    易语言-易语言真正的线程池简易实现

    每个线程都使用默认的堆栈大小,以默认的优先级运行,并处于多线程单元中。超过最大值的线程可以排队,但他们要等到其他线程完成后才启动。 具体参见:http://baike.baidu.com/view/262150.htm 二.实现的过程概述:...

    Qt4中文教程[完整版]

    5. Qt包含对多线程编程的支持,允许创建多线程应用程序,有效利用多核处理器的能力。 6. Qt具有一个强大的构建系统,可以让开发者通过简单的配置来编译和部署应用程序。 7. Qt还提供了一个模型/视图框架,用于管理...

    c99 学习笔记

    C语言的编程基础涉及数据类型、控制结构、函数、指针等核心概念,而高级编程则涵盖更复杂的话题,如动态内存管理、文件操作、多线程和进程间通信。 内容部分由于OCR扫描结果存在文字识别错误和遗漏,导致部分信息...

    FIBOCOM G500 OpenCPU 编程应用设计说明_V1.0.1.pdf

    此外,文档还强调了开发中的注意事项,比如模块程序与用户程序的匹配、线程的创建、系统函数返回值的定义、文件系统的使用、定时器、GPIO操作、动态内存分配、信号量的使用、数据输入输出、Socket接口以及中断同步等...

    CONCUR 2005

    5. 程序语言理论:研究如何设计支持并发的语言构造,例如线程、进程、消息传递、锁、信号量等,并探讨它们的语义和类型系统。 6. 操作系统支持:分析操作系统如何提供并发执行的机制,包括进程调度、内存管理、和...

    操作系统代码

    进程是操作系统中执行程序的实例,而进程管理则确保多任务环境下的公平性和效率。 2. **内存管理**:这部分涉及内存分配、回收、页面置换算法(如LRU、LFU、最佳替换算法等)以及虚拟内存的实现。内存管理确保了多...

    【RT-Thread作品秀】基于RT-Thread的星务平台研究-电路方案

    软件框架说明软件框架如图2所示,软件定时器以4Hz频率给星务线程信号量,星务线程启动后,检测其他各个线程的运行状况,核对线程运行时间,核对软件狗计数是否超过阈值,核对运行时间片,当都满足后,给所有线程信号...

    PINTOS PROJECT2 自己讲课用的PPT

    这包括了进程的生命周期管理,如创建、唤醒、睡眠和终止,以及多线程环境下的同步原语,如互斥锁、信号量和条件变量。 其次,内存管理是操作系统的重要组成部分。在PINTOS中,学生可能需要设计和实现虚拟内存系统,...

Global site tag (gtag.js) - Google Analytics