为什么 TaskSpawn 采用整数而不是 void*?

Why does TaskSpawn take ints instead of void*?

对于 vxWorks 操作系统,它们提供了一个用于生成任务的系统库:

int taskSpawn
    (
    char *  name,             /* name of new task (stored at pStackBase) */
    int     priority,         /* priority of new task */
    int     options,          /* task option word */
    int     stackSize,        /* size (bytes) of stack needed plus name */
    FUNCPTR entryPt,          /* entry point of new task */
    int     arg1,             /* 1st of 10 req'd task args to pass to func */
    int     arg2,
    int     arg3,
    int     arg4,
    int     arg5,
    int     arg6,
    int     arg7,
    int     arg8,
    int     arg9,
    int     arg10
    )

你可以看到这与 std::thread.
之类的东西相比有多么有限 通常,我可以根据入口函数传入适当的参数。


鉴于这是一个 C 函数,我很好奇 vxWorks 选择将参数 1-10 设为整数而不是空指针是否有原因。

如果它们是空指针,我将能够传入任何类型,然后将其转换回入口函数。

如果我想把struct foo的指针传给给taskSpawn的入口函数,能不能转成整数,再传回合适的指针?
基于这个函数的设计,我是否被迫使用全局变量?

我想你会发现在VxWorks上一个整数和一个指针一样大,通常的做法是在它们之间进行转换。所以如果你想通过 TaskSpawn 传递一个指针,你可以将它作为 (int)ptr.

传递

不,这不是可移植的 C,但在这个平台上使用此功能显然是正常做法。