c - 在 C 中将结构发送到线程

标签 c multithreading struct structure

我正在学习如何使用线程,根据我的理解和我所读到的内容,我做的一切都是正确的(显然我不是)。程序编译并没有给出任何错误,尽管看起来线程没有被创建。

我有一个包含所有包含内容和结构的头文件。我想保持程序原样(主要将结构发送到另一个函数并在该函数上创建线程)

这是我到目前为止所得到的代码:

话题

void * print_data(void *arg){
    Vector *data= (Vector*)arg;

    printf("THREAD\n");
    printf("Number: %d\n",data->number);
    printf("Name: %s\n",data->name);
    printf("Address: %s\n", data->address);
    printf("\n");

    pthread_exit(NULL); 
}

创建/调用线程的函数

void fills_vector(Vector *dados){
    pthread_t threads[VECSIZE];
    int i, s;

    for(i = 0; i < VECSIZE; i++){

        printf("Creating thread %d...\n", i);

        s = pthread_create(&threads[i], NULL, print_data, (void*)data+i);

        if(s < 0){
            perror("Error creating the thread");
            exit(-1);
        }
    }

}

主要

int main(void){
    Vector data[VECSIZE];

        data[0].number=1; data[0].name="João" ; data[0].address="Rua A";
        data[1].number=2; data[1].name="Ana" ; data[1].address="Rua B";
        data[2].number=3; data[2].name="Pedro" ; data[2].address="Rua C";
        data[3].number=4; data[3].name="Clara" ; data[3].address="Rua D";
        data[4].number=5; data[4].name="Manuel" ; data[4].address="Rua E";

    fills_vector(data);

    return 0;
}

结构为

typedef struct Vector{

    int number;
    char *name;
    char *address;

} Vector;

且 VECSIZE = 5

我做错了什么?这些线程甚至不打印第一行,但创建它们时不会出错。

如果您需要更多信息,请随时询问并提前致谢

最佳答案

(void*)data+i更改为(void*)(data+i)

前者格式错误(void 指针上没有指针算术),如果你的编译器让你侥幸逃脱,那么 a) 你没有教会你的编译器表现良好,它在浪费你的时间,并且b) 你可能会得到一些你本意之外的东西。

结果:使用高质量的编译器是值得的,它可以帮助更好地理解 C。优秀编译器的示例:

gcc -W -Wall -Wextra -pedantic -std=c11
clang -W -Wall -Wextra -pedantic -std=c11

关于c - 在 C 中将结构发送到线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37295298/

相关文章:

c - 在 C 中优化 'sorting code'

c# - 如何使用 CancellationToken 安全取消任务并等待 Task.WhenAll

c++ - 在哪些平台上线程本地存储受到限制,可用的空间有多少?

java - 如何从另一个 Activity 触发一个 Activity 的方法调用?

swift - 间接枚举和结构

Calloc()、结构和 C

c - 使用 clock() 获取时间戳(Visual Studio 2010,C/C++)

c - 链接列表反向递归功能不起作用

c - 可变长度数组上 sizeof 的行为(仅限 C)

c++ - 错误 : No operator “<<” matches these operands