在c中作为参数传递队列

在c中作为参数传递队列,c,parameters,queue,C,Parameters,Queue,我在源文件a.c和b.c之间传递这样的队列 档案:a.c 档案:b.c 如果只将索引传递给函数,可能会更容易: void *sendPacket(int queue_idx) { queue_t *queue = &sq[queue_idx]; } struct queue_state qsa = malloc(sizeof *qsa); if(qsa != NULL) { qsa->queue = new_queue(); qsa->index = 471

我在源文件a.c和b.c之间传递这样的队列

档案:a.c

档案:b.c


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

void *sendPacket(int queue_idx) {
    queue_t *queue = &sq[queue_idx];
}
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_state {
    void *queue;
    int  index;
};
然后实例化一个结构,并将指向该结构的指针传递给线程函数:

void *sendPacket(int queue_idx) {
    queue_t *queue = &sq[queue_idx];
}
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文件中。

如果在b.C中您可以访问sq,您可以将索引传递给队列。否则,您可以传递一个包含实际队列和索引的结构。您的问题描述非常粗略。但至少据我所知,您实际上需要向函数传递两个参数:指向队列的指针(对我来说似乎是一个数组)和该队列中的索引

不能将两个参数都打包在一个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;
}

请更新您的标题;问题在于没有将队列作为参数传递。