在存根中运行功能。传递函数指针

时间:2013-10-20 15:23:04

标签: c++ c function pointers function-parameter

我正在创建用户级线程库,我想要做的是在存根中运行一个函数,所以我想将函数指针传递给存根函数。

这是我的存根函数:

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
}

感谢任何帮助。谢谢!

1 个答案:

答案 0 :(得分:1)

如果您对实现自己的用户级线程库感兴趣,我建议您查看(现已弃用)ucontext实现。具体来说,查看ucontext.h中使用的结构的定义将帮助您查看实际需要捕获的所有内容,以获取线程状态的有效快照。

您尝试使用示例中错误的(address_t)广告素材捕获的内容是当前的continuation。不幸的是,C不支持一流的延续,所以你会陷入更低级别的事情,比如交换堆栈和转储寄存器(因此我指的是ucontext作为参考 - 如果你真的想要做到这一点,那将会有点复杂。)