-1

我在源文件 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? */
}
4

4 回答 4

1

创建队列的更高级表示。似乎队列可以是一个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 文件中都包含的共享标头(例如 )中。

于 2012-05-20T14:22:01.623 回答
1

你的问题描述很粗略。但至少据我了解,您实际上需要将 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;
}
于 2012-05-20T14:24:55.430 回答
0

如果您只是将索引传递给函数,可能会更容易:

void *sendPacket(int queue_idx) {
    queue_t *queue = &sq[queue_idx];
}
于 2012-05-20T14:20:26.910 回答
0

如果在bc中您可以访问sq,则可以将索引传递给队列。否则,您可以传递一个包含实际队列和索引的结构

于 2012-05-20T14:23:27.503 回答