针对vxWorks操作系统,他们提供了一个用于创建任务的系统库:
您可以看到相比于std::thread,这种方式非常有限。
通常情况下,我可以根据入口函数传递相应的参数。
考虑到这是一个C函数,我想知道为什么vxWorks选择将参数1-10作为int而不是void指针。
如果它们是void指针,我就能够传递任何类型,并在进入函数后进行强制类型转换。
如果我想将
基于这个函数的设计,我是否被迫使用全局变量?
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作为int而不是void指针。
如果它们是void指针,我就能够传递任何类型,并在进入函数后进行强制类型转换。
如果我想将
struct foo
的指针传递给taskSpawn中提供的入口函数,它能被转换为整数,然后再转换回适当的指针吗?基于这个函数的设计,我是否被迫使用全局变量?
intptr_t
和它的兄弟uintptr_t
。这不仅保证了指针的保存,而且还清楚地说明了“此对象可能保存指针”。 - too honest for this site