2010-09-09 96 views
2

我为线程创建了一个函数,但是我想将多个参数传递给该函数。如何将多个参数传递给线程函数

这里是我的源代码:

#include "work.h" 
#include <stdio.h> 
#include <unistd.h> 
#include <pthread.h> // compile with -lpthread 

int count = 20; 

void* ChildProc(void* arg) 
{ 
    int i; 

    for(i = 1; i <= count; i++) 
    { 
     printf("%s:%d from thread <%x>\n", arg, i, pthread_self()); 
     DoWork(i); 
    } 

    return NULL; 
} 

void ParentProc(void) 
{ 
    int i; 

    for(i = count/2; i > 0; i--) 
    { 
     printf("Parent:%d from thread <%x>\n", i, pthread_self()); 
     DoWork(i); 
    } 
} 

int main(void) 
{ 
    pthread_t child; 

    pthread_create(&child, NULL, ChildProc, "Child"); 

    ParentProc(); 

    pthread_join(child, NULL); // make child a non-daemon(foreground) thread 
} 

现在我该怎样传递多个参数ChildProc()方法?

一种方法是传递数组或结构。但是如果我想传递多个变量而没有数组或结构呢?

+0

是否有任何其他类似于pthread_create()的方法可以支持多个参数? – Searock 2010-09-09 05:59:27

回答

1

你可以通过一个void *缓冲流,如果你知道长度,那么你可以访问它们。它类似于执行GArrays

你是如何创建它们的?

void *buffer = malloc(sizeofelements); 
memcpy(buffer,element1,sizeof element1); 
memcpy(buffer+sizeof element1,element2, sizeof element2); 

注:上面的是不是一个可编译的C代码。你需要处理它。

您可以使用上述类型的东西。

您可以稍后访问变量,因为您已知道大小

+0

你的意思是“不是一个可编译的C代码”? – Searock 2010-09-09 10:09:34

+0

我的意思是它不会编译,如果你CTRL-C CTRL-V,但是如果你使用的代码和函数调用正确,它将工作。像'memcpy(dest,ptr,size);'和我写的内容足以理解一个人必须按照这里所述来做。 – 2010-09-09 10:33:15

+0

+1提供了一种替代方法。 – Searock 2010-09-09 10:49:50

7

一种快速和垃圾答案是创建一个结构,以容纳所有参数,并通过其指针

+0

如何在C中创建参数类对象? – Searock 2010-09-09 05:56:47

+0

忘记**类对象**。在C语言中:创建一个结构来保存参数,从中实例化一个变量,设置参数,将这个变量的指针传递给 – mmonem 2010-09-09 06:07:51

+7

快速回答没有什么垃圾 - 这是正确的答案。 – 2010-09-09 06:09:16

3

一种方式是要么通过一个阵列或结构。

这就是的方式。 指针到一个结构,也就是说。

如果我想通过一个数组或结构的多个变量呢?

然后你运气不好。数组或指向结构的指针就是你需要的。

+0

是否有任何其他类似于pthread_create()的方法可以支持多个参数? – Searock 2010-09-09 05:59:51

+1

传递指向结构的指针,而不是结构本身。 – 2010-09-09 06:08:17

+3

@Searock:不 - 没有任何其他方法类似于支持多个参数的pthread_create()。 – 2010-09-09 06:08:52