对于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相比有多么有限 通常,我可以根据entry函数传入适当的参数。
鉴于这是一个C函数,我很好奇是否有一个原因是vxWorks选择让参数1-10为int而不是void指针。
如果它们是void指针,我将能够传入任何类型,然后将其转换回入口函数。
如果我想将struct foo
的指针传递给taskSpawn的入口函数,是否可以将其转换为整数,然后返回相应的指针?
基于此函数的设计,我是否被迫使用全局变量?
答案 0 :(得分:2)
我想你会发现在VxWorks上,一个整数与指针的大小相同,通常的做法是在它们之间进行转换。因此,如果您想通过TaskSpawn
传递指针,则可以将其作为(int)ptr
传递。
不,这不是便携式C,但在这个平台上使用此功能显然是正常做法。