将struct传递给pthread_create中的函数

时间:2013-11-09 03:15:43

标签: c pthreads

我是C的新手,有人可以帮助我吗?

#include <stdio.h>
#include <stdlib.h>
#include <pthread.h>
#include <windows.h>

struct New
{
 char a;
 int b;
};


void *Print_Func (void* Ptr)
{
 Sleep(5);
 printf("%d\n",Ptr.a);
 printf("%d\n",Ptr.b);
}

int main (void)
{
 pthread_t Thread1;
 while(1)
 {
  struct New Flag;
  Flag.a=5;
  Flag.b=1234567;
  pthread_create(&Thread1,NULL,Print_Func,&Flag);
  pthread_join(Thread1,NULL);
  printf("\n");
 }
 system("pause>nul");
}

为什么编译器总是报告

错误:在非结构或联合的情况下请求成员'a'

错误:在非结构或联合的情况下请求成员'b'

ENVIR。 :Windows7 C:B mingw32-gcc.exe

由于

1 个答案:

答案 0 :(得分:1)

请报告您粘贴到问题中的确切代码发生错误的行号。

问题出现在这里:

void *Print_Func (void* Ptr)
{
 Sleep(5);
 printf("%d\n",Ptr.a);
 printf("%d\n",Ptr.b);
}

void *不是结构。您需要将void *转换为struct New *

void *Print_Func (void *Ptr)
{
    struct New *data = Ptr;
    Sleep(5);
    printf("%d\n", data->a);
    printf("%d\n", data->b);
}

多个空格也是值得缩进的(在SO上最好是4个),通常用逗号后的空格看起来更好。