2012-05-20 163 views
-1

我传递队列这样的源文件AC和BC之间传递队列作为参数在C

文件:AC

sq[a]=new_queue(); 

pthread_create(&st[a],NULL,sendPacket,sq[a]); 

文件:BC

void *sendPacket(void *queue){ 

/* here i need to know which queue has come ,determine 
    the index of queue how can I do it? */ 
} 
+1

请更新您的称号;问题不在于“将队列作为参数传递”。 –

回答

0

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

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

0

如果在b.c您有权访问sq,您可以将索引传递给队列。否则,您可以传递包含实际队列和索引的结构

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; 
}