相关疑难解决方法(0)

使用getcontext/setcontext切换堆栈

我试图了解getcontext/setcontext是否能在特定场景中正常工作.

我可以看到如何使用setcontext()将堆栈展开回历史记录中的某个位置.

#include <stdio.h>
#include <ucontext.h>

int  rollback = 0;
ucontext_t context;

void func(void)
{
    setcontext(cp);
}

int main(void)
{
    getcontext(&context);
    if (rollback == 0)
    {
        printf("getcontext has been called\n");
        rollback++;
        func();
    }
    else
    {
        printf("setcontext has been called\n");
    }
}
Run Code Online (Sandbox Code Playgroud)

但是我想知道在放松之后你是否可以重新回到未来的某个地方?我想这取决于getcontext()调用捕获堆栈的副本,​​我无法在文档中找到确切的详细信息.

#include <stdio.h>
#include <ucontext.h>

int  rollback     = 0;
int  backToFuture = 0;
ucontext_t context;
ucontext_t futureContext;

void func(void)
{
    // Some complex calc
    if (some-condition)
    {
        getcontext(&futureContext);  // After returning I want to come back
                                     // …
Run Code Online (Sandbox Code Playgroud)

c ucontext

6
推荐指数
1
解决办法
1822
查看次数

标签 统计

c ×1

ucontext ×1