我正在创建一个用户级线程库,我想做的是在 stub 中运行一个函数,所以我想将函数指针传递给 stub 函数。
这是我的 stub 函数:
void _ut_function_stub(void (*f)(void), int id)
{
(*f)();
DeleteThread(id);
}
这是用户调用的。我想要做的是获取 _ut_function_stub 的指针以分配给 pc 我已经尝试了各种不同的选项,包括强制转换,但编译器一直说“无效使用 void 表达式” .
int CreateThread (void (*f) (void), int weight)
{
... more code
pc = (address_t)(_ut_function_stub(f, tcb->id));
... more code
}
感谢任何帮助。谢谢!
最佳答案
如果您有兴趣实现自己的用户级线程库,我建议您查看(现已弃用)ucontext
执行。具体来说,查看 ucontext.h
中使用的结构的定义。将帮助您查看您实际需要捕获的所有内容,以获取线程状态的有效快照。
您在示例中使用错误的 (address_t)
真正试图捕获的是当前的 continuation .不幸的是,C 不支持一流的延续,所以你将被困在做更底层的事情,比如交换堆栈和转储寄存器(因此我将你指向 ucontext
作为一个引用——如果你真的想把它弄好,这会有点复杂)。
关于c++ - 在 stub 中运行函数。传递函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19479146/