我正在尝试调用函数start_thread()。我要传递的两个参数是void函数send和portId 0的地址。但是我一直收到错误 预期'struct port_t *'但参数的类型为'struct port_t *'threads.h。为什么我会收到此错误?
typedef struct port_t {
int port[N];
semaphore_t producer, consumer, mutex;
int id;
} port_t;
int main()
{
port_t id[100];
int x;
for(x =0; x < 100; x++)
{
createPort(id[x], x);
}
start_thread(send, &id[0]);
}
int send(port_t temp)
{
while (1){
printf("Port %d: trying to send\n", temp.id);
P(&temp.consumer);
P(&temp.mutex);
printf("Port %d: sending message\n", temp.id);
V(&temp.mutex);
V(&temp.producer);
return 1;
}
}
void start_thread(void *function, struct port_t *port) //getting the message for this line
{
printf("In main: creating thread\n");
struct stack * stackP = (struct stack*)malloc(8192);
tcb = (struct TCB_t *)malloc(sizeof(struct TCB_t));
init_TCB (tcb, function, stackP, 8192, port);
tcb->val = port->id;
add_to_list( &ptr, &tcb);
}
答案 0 :(得分:1)
使您的结构定义如下。不要忘记预先宣布这些功能。在使用struct port_t的任何地方使用port_t。
typedef struct {
int port[N];
semaphore_t producer, consumer, mutex;
int id;
} port_t;
答案 1 :(得分:-1)
这......
void *function
...是一个对象指针,而不是一个函数指针。要声明一个接受与send()
函数兼容的函数指针作为参数的函数,你可以这样做......
void start_thread(int (*function)(port_t), struct port_t *port) { // ...
......或者......
void start_thread(int (*function)(struct port_t), struct port_t *port) { // ...
。但是,我确实发现你的send()
函数的签名有点可疑。将指针传递给结构体更为常见,而不是传递结构本身(按值)。