c++ - 在 stub 中运行函数。传递函数指针

标签 c++ c function pointers function-parameter

我正在创建一个用户级线程库,我想做的是在 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/

相关文章:

c++ - 当 A 和 B 没有共同的祖先时,通过 dynamic_cast 从 A* 转换为 B* 是否有效?

c - 将 "== 0"与 "IF"语句一起使用

c - 将 C 程序翻译成其他编程语言

javascript - 我们需要包含 javascript 方法的返回类型吗

javascript - 添加NVD3图表的选择框

c++ - 按照符号链接(symbolic link)并使用 QFileInfo 获取绝对路径

c++ - 逆序获取 `std::priority_queue`个元素?

c++ - 使用std::cin作为输入的C++代码中途崩溃

c - 使用指针进行内存管理

Javascript - 原型(prototype)设计的值(value)是什么?