我在源文件 ac 和 bc 之间传递这样的队列
文件:ac
sq[a]=new_queue();
pthread_create(&st[a],NULL,sendPacket,sq[a]);
文件:公元前
void *sendPacket(void *queue){
/* here i need to know which queue has come ,determine
the index of queue how can I do it? */
}
我在源文件 ac 和 bc 之间传递这样的队列
文件:ac
sq[a]=new_queue();
pthread_create(&st[a],NULL,sendPacket,sq[a]);
文件:公元前
void *sendPacket(void *queue){
/* here i need to know which queue has come ,determine
the index of queue how can I do it? */
}
创建队列的更高级表示。似乎队列可以是一个void *
(你没有显示它的实际类型,即new_queue()
调用返回什么?),所以在添加附加参数的同时将它嵌入到一个结构中:
struct queue_state {
void *queue;
int index;
};
然后实例化一个结构,并将指向它的指针传递给线程函数:
struct queue_state qsa = malloc(sizeof *qsa);
if(qsa != NULL)
{
qsa->queue = new_queue();
qsa->index = 4711; /* or whatever */
pthread_create(&st[a], NULL, sendPacket, qsa);
}
然后线程函数可以使用struct
声明访问所有字段。当然,声明需要在queue.h
两个 C 文件中都包含的共享标头(例如 )中。
你的问题描述很粗略。但至少据我了解,您实际上需要将 2 个参数传递给您的函数:(指向)队列(对我来说似乎是一个数组),以及该队列中的索引。
您不能将两个参数都打包在一个类型为 的变量中void*
。你可以做的是声明一个包含所有需要参数的结构,填充它,并将指向它的指针传递给你的线程。
像这样(省略错误处理):
struct Params
{
queue* m_Queue;
size_t m_Idx;
};
// ...
Params* pParams = new Params;
pParams->m_Queue = sq;
pParams->m_Idx = a;
pthread_create(&st[a],NULL,sendPacket, pParams);
void *sendPacket(void *pPtr)
{
Params* pParams = (Params*) pPtr;
// ...
delete pParams;
}
如果您只是将索引传递给函数,可能会更容易:
void *sendPacket(int queue_idx) {
queue_t *queue = &sq[queue_idx];
}
如果在bc中您可以访问sq
,则可以将索引传递给队列。否则,您可以传递一个包含实际队列和索引的结构