`

setjmp与longjmp的使用

阅读更多

#include "stdafx.h"
#include  <setjmp.h>  
#include <iostream>
#include <Windows.h>
using namespace std;

jmp_buf	g_objJmp;

void fun();

int main()
{
	while (true)
	{
		switch (setjmp(g_objJmp))
		{
		case -1:
			cout << "stop process err!" << endl;
			return -1;

		case 0:	//run ok
			cout << "run succ" << endl;
			break;

		case 1:
			cout << "err 1" << endl;
			break;

		case 2:
			cout << "err 2" << endl;
			break;

		default:
			cout << "unknow err!" << endl;

			break;
		}

		Sleep(1000);
		
		fun();
	}
}

void fun()
{
	static int nTimes = 0;

	cout << "run times: " << nTimes << endl;

	int nVal = rand() % 3 + 1;

	nTimes++;
	if (10 == nTimes)
	{
		nVal = -1;
	}

	longjmp(g_objJmp, nVal);
}
 
分享到:
评论

相关推荐

    用 setjmp 和 longjmp 实现多线程(1)_多线程_

    用 setjmp和longjmp 实现多线程介绍

    c标准异常处理-全面了解setjmp与longjmp的使用[参照].pdf

    c标准异常处理-全面了解setjmp与longjmp的使用[参照].pdf

    使用setjmp,longjmp函数模拟多任务实时操作系统

    使用c标准库里面的setjmp,longjmp来模拟嵌入式操作系统中的任务。可以在单线程里面运行多个任务。在vc6.0中调试通过。对深入了解嵌入式多任务环境很有帮助

    setjmp和longjmp详细介绍

    关于setjmp和longjmp的详细介绍,可以实现类似异常处理。等等,以及使用时注意事项,和goto的差别

    浅析C语言中的setjmp与longjmp函数

    setjmp和longjmp是C语言独有的,只有将它们结合起来使用,才能达到程序控制流有效转移的目的,按照程序员的预先设计的意图,去实现对程序中可能出现的异常进行集中处理。 先来看一下这两个函数的定义吧: setjmp和...

    C语言的setjmp:异常处理与构建协作式多任务系统

    在C标准库中有一对非常有趣的函数setjmp()函数与longjmp()函数,用来实现代替goto 实现一些非常重要的功能,如异常处理。C语言中,标准库函数setjmp和longjmp形 成了结构化异常工具的基础。简单的说即setjmp实例化...

    使用C语言实现各种数据结构与运算算法

    包含了不透明指针,断言处理时机,二级指针的用法,宏定义,复杂结构体,setjmp/longjmp,数据结构常见算法(可惜没有二叉树),以及精度计算,高级字符串使用,初学者可以直接使用其接口,并观察其事例代码,提高者...

    C语言异常与断言接口的实现

     标准库函数setjmp和longjmp  在C语言中,标准库函数setjmp和longjmp形成了结构化异常工具的基础。简单的说是setjmp实例化处理程序,而longjmp产生异常  setjmp和longjmp是C语言所独有的,它们部分弥补了C语言...

    C语言模拟实现 try catch

    在C语言中,使用goto和标签的方式模拟try catch的功能,使用setjmp和longjmp方式模拟try catch的功能,两种方式都可以使用,setjmp的方式可以支持try catch嵌套,goto的方式不支持嵌套,但是jmpbuf的开销是比较大的...

    LINUX环境高级编程 第四章 进程管理

    main函数和命令行参数 进程的启动和终止 环境表和环境变量 存储空间布局 存储器分配 setjmp和longjmp函数

    图像解码之二——使用libpng解码png图片1

    3、设置错误返回点 上文libjpeg解码jpeg图片中提到用setjmp/longjmp函数来处理异常 4、设置libpng的数据源 我在上文《图

    CException:C的轻量级异常实现

    异常 本文档是在Creative Commons 3.0归属相似的许可下发布的 CException是C中的简单异常处理。它比成熟的C ++异常处理要快得多,但是却失去了灵活性... CException使用C标准库函数setjmp和longjmp进行操作。 只要目标

    c语言没有try catch的替代方案

    setjmp与longjmp 后缀jmp指的就是jump,关看名字就能猜到这哥俩是干啥的了。使用他们俩就可以让程序控制流转移,进而实现对异常的处理。 异常处理的结构可以划分为以下三个阶段: 准备阶段:在内核栈保存通用寄存器...

    state threads学习笔记.docx

    协程库state threads library(以下简称st)是一个基于setjmp/longjmp实现的C语言版用户线程库或协程库(user level thread)。 本文详细说明了协程库的特点及工作原理,结合代码很容易理解。 srs流媒体服务器就是基于...

    ackermann:Ackermann函数的一些实现

    阿克曼 Ackermann函数的某些实现。...setjmp / longjmp实现优化了Ackermnn函数 setjmp / longjmp的一般实现 while循环实现 转到执行 Java 合规的实施 while循环实现 去做 创建Makefile 其他语言 其他方法 使用C的GMP

    UNIX环境高级编程(第七章)

    第7章 UNIX进程的环境 122 7.1 引言 122 ...7.10 setjmp 和longjmp函数 132 7.10.1 自动、寄存器和易失变量 134 7.10.2 自动变量的潜在问题 136 7.11 getrlimit 和setrlimit函数 136 7.12 小结 139 习题 140

    pthread_coroutine:使用Posix线程实现的coroutine

    使用Posix线程实现的coroutine协程的关键在于栈的保存沿用,有很多其他版本的C实现的coroutine,如:setcontex, setjmp/longjmp。我认为线程拥有自己的数据栈,天然提供栈的沿用,再利用pthread_mutex_t, pthread_...

    bap-toolkit:随时可用的二进制分析工具的集合

    不使用setjmp / longjmp 不使用信号处理工具 不得使用输入/输出库 - atof , atoi和atol不被使用 不使用abort , exit , getenv和system av-rule-25-未使用接口 av-rule-174-潜在的空指针解引用 av-rule-

Global site tag (gtag.js) - Google Analytics