为什么 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,但在这个平台上使用此功能显然是正常做法。
对于 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,但在这个平台上使用此功能显然是正常做法。