• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >C语言 > sigsetjmp的用法总结

sigsetjmp的用法总结

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-28

通过本文主要向大家介绍了sigsetjmp,as的用法总结,make的用法总结,by的用法总结,need的用法总结等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

相关函数:longjmp, siglongjmp, setjmp

表头文件:#include <setjmp.h>

函数定义:int sigsetjmp(sigjmp_buf env, int savesigs)

函数说明:sigsetjmp()会保存目前堆栈环境,然后将目前的地址作一个记号,

而在程序其他地方调用siglongjmp()时便会直接跳到这个记号位置,然后还原堆栈,继续程序的执行。

参数env为用来保存目前堆栈环境,一般声明为全局变量

参数savesigs若为非0则代表搁置的信号集合也会一块保存

当sigsetjmp()返回0时代表已经做好记号上,若返回非0则代表由siglongjmp()跳转回来。

返回:若直接调用则为0,若从siglongjmp调用返回则为非0

实例:

sigjmp_buf jmp_env;

static void connect_alarm(int)
{
    siglongjmp(jmp_env, 1);
}

int main()
{
    // 当超时时间sec_timeout大于等于运行时间run_time时会跳过printf("running...\n");
    int sec_timeout = 3;
    int run_time = 2;

    printf("timeout = %d, run time = %d\n", sec_timeout, run_time);
    if (sec_timeout)
    {
        // 超过用alarm函数设置的时间时产生此信号,调用connect_alarm函数
        signal(SIGALRM, connect_alarm);
        alarm(sec_timeout);
        printf("set timeout\n");
        if (sigsetjmp(jmp_env, 1))
        {
            printf("timeout\n");
            goto out;
        }
    }

    sleep(run_time);
    printf("running...\n");

out:
    if (sec_timeout)
    {
        // 取消先前设置的闹钟
        alarm(0);
        printf("cancel timeout\n");
    }

    return 0;
}
</div>
程序运行:
当ec_timeout = 3, run_time = 2时:
timeout = 3, run_time = 2
set timeout
running...
cancel timeout

当ec_timeout = 3, run_time = 4时:
timeout = 3, run_time = 4
set timeout
timeout
cancel timeout

</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • sigsetjmp的用法总结

相关文章

  • 2017-05-28c++中临时变量不能作为非const的引用参数的方法
  • 2017-05-28标准CSV格式的介绍和分析以及解析算法实例详解
  • 2017-05-28深入理解C++的对象模型
  • 2017-05-28C++初始化列表学习
  • 2017-05-28C语言将数组中元素的数排序输出的相关问题解决
  • 2017-05-28C++实现二叉树遍历序列的求解方法
  • 2017-05-28OnSize、OnSizing和OnGetMinMaxInfo区别分析
  • 2017-05-28C++实现翻转单词顺序
  • 2017-05-28浅谈几种常见语言的命名空间(Namespace)
  • 2017-05-28C语言 指针数组详解及示例代码

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • C++编程中的函数指针初步解析
    • C++基础入门教程(七):一些比较特别的基础语法总结
    • C语言中 int main(int argc,char *argv[])的两个参数详解
    • c语言中用位运算实现加法技巧介绍
    • C++、C语言和JAVA开发的区别
    • 基于Turbo C(V2.0)编译错误信息的详细介绍
    • C语言栈顺序结构实现代码
    • 详解C++中基类与派生类的转换以及虚基类
    • C语言中字符串常用函数strcat与strcpy的用法介绍
    • c实现linux下的数据库备份

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有