【发布时间】:2011-05-04 09:59:02
【问题描述】:
pthread 函数采用 void * 参数。如何发送一个普通的结构,而不是一个指针?
我想向一个 pthread 函数发送一个非指针结构。
另外我想发送一个指向 void * 函数的指针,这是怎么做的呢?可以将任何指针发送到 void * 函数吗?
【问题讨论】:
-
要传递一个结构,你需要传递它的地址(将它转换成一个指针)。但是,您需要确保对象不会被破坏(因为线程将引用它)。是的,您可以将任何指针传递给 void *
-
你不能(AFAIK)。指向基于堆的结构的指针有什么问题?
-
我可以不只是将这样的结构 &thestruct 发送到 (void *)
-
@Helium3:是的,但是确保结构不会消失。因此,例如,如果它是一个局部变量,该函数可能会在一个线程中返回,而新线程仍然有一个指向不再存在的对象的指针......
-
@forsvarir:如果我有一个 GPSLocation 的结构。我有一个看门狗线程启动和监控 GPS I/O 线程和 GPS 导航线程。我需要将结构传递给看门狗,然后将其从看门狗传递给导航线程。当每个线程函数从 void * 回退时,是否会复制它?如果传入一个指针,这是否会消除坏数据或结构丢失的可能性/