我试图了解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)