st_thread的的调用过程是在过于复杂。为了方便理解,我想写了个比较简单的例子
代码如下
// jumptest.cpp : 定义控制台应用程序的入口点。
//
#include "stdafx.h"
#include <windows.h>
#include <setjmp.h>
jmp_buf buf;
jmp_buf buf_banana;
jmp_buf buf_apple;
void banana()
{
printf("in banana() \n");
if (setjmp(buf_banana))
{
printf("jump banana() \n");
longjmp(buf, 2);
}
else
{
printf("first enter banana \n");
longjmp(buf, 2);
}
printf("you'll never see this,because i longjmp'd");
}
void apple()
{
printf("in apple() \n");
if (setjmp(buf_apple))
{
printf("jump apple() \n");
longjmp(buf, 3);
}
else
{
printf("first enter apple \n");
longjmp(buf, 3);
}
printf("you'll never see this,because i longjmp'd");
}
int _tmain(int argc, _TCHAR* argv[])
{
int _setResult = 0;
bool _bAppleIni = false;
if (_setResult = setjmp(buf))
{
Sleep(1000);
printf("back in main,%d\n", _setResult);
switch (_setResult)
{
case 0:
{
break;
}
case 2://banana---->apple
{
if (false == _bAppleIni)
{
_bAppleIni = true;
apple();
}
else
{
longjmp(buf_apple, 1);
}
break;
}
c