gpt4 book ai didi

c++ - 我如何知道哪个上下文处于事件状态?

转载 作者:太空宇宙 更新时间:2023-11-04 05:46:45 25 4
gpt4 key购买 nike

有 2 个问题。1. 我可以找出当前处于事件状态的上下文吗?
2. 我可以以某种方式将 ucontext 作为参数从一个函数传递到另一个函数吗?我想做这样的事情:

    //Instead of this


#include <pthread.h>
#include <iostream>
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <ucontext.h>
#include <queue>

#define MEM 64000
#define MEMS 16000
#define MEL 32000
using namespace std;
ucontext_t N1,N2, Main;

void fn1()
{
for(int i=0;i<=3;i++){
cout<<i<<ndl;
swapcontext(&N1,&N2);
}
}

void fn2()
{
for(int i=4;i<=7;i++){
cout<<i<<endl;
if(i==7)
swapcontext(&N2,&Main);
else
swapcontext(&N2,&N1);
}
}
int main(int argc, char *argv[])
{
getcontext(&Main);
getcontext(&N1);
getcontext(&N2);
N1.uc_link=0;
N1.uc_stack.ss_sp=malloc(MEM);
N1.uc_stack.ss_size=MEM;
N2.uc_link=0;
N2.uc_stack.ss_sp=malloc(MEMS);
N2.uc_stack.ss_size=MEMS;
makecontext(&N1, fn1, 0);
makecontext(&N2, fn2, 0);
swapcontext(&Main,&N1);
printf("completed\n");
exit(0);
}
//Do something like this

void fn1()
{
for(int i=0;i<=3;i++){
cout<<i<<endl;
swapcontext(&N1,&Man);
}
}

void fn2()
{
for(int i=4;i<=7;i++){
cout<<i<<endl;
if(i==7)
swapcontext(&N2,&Main);
else
swapcontext(&N2,&Man);
}


void Manager()// void Manager(ucontext_t u)??? and makecontext(&Man,(void(*)())Manager,1,...)
{
//which ucontext transferred control ?
queue <ucontext> q;
push.active_context;
...
swapcontext(&Man,&another_context);
}

一般来说,你需要制作一个Manager,其中会有一个队列,你需要找出哪个上下文是事件的并将其放在队列末尾,并将控制权传递给另一个上下文

最佳答案

  1. Can I find out which context is currently active ?

这对于 getcontext() 来说是微不足道的,但您实际上想要找出的是哪个上下文在激活 Manager 之前处于事件状态。你不能这样做(除非旧的上下文将信息存储在全局变量中)。

  1. Can I pass in somehow a ucontext, from one function to another as an argument .

由于函数参数只能在函数入口处传递给Manager,并且Manager不会在开始时重新进入,而是从swapcontext()返回,所以你不能这样做。

要通过管理器实现控制传递,您可以做的是让它确定要激活的上下文,例如。克。

void Manager()
{
ucontext_t *another_context = &N1; // begin with N1
for (;; another_context = another_context == &N1 ? &N2 : &N1) // switch context
swapcontext(&Man, another_context);
}

通过使用ucontext_t数组而不是N1N2,可以轻松地将其扩展到两个以上的上下文。

关于c++ - 我如何知道哪个上下文处于事件状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56009741/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com