Как передать несколько параметров в функцию потока - PullRequest
2 голосов
/ 09 сентября 2010

Я создал функцию для потока, но я хочу передать ей несколько параметров.

Вот мой исходный код:

#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 ()?

Один из способов - передать массив или структуру.Но что, если я хочу передать несколько переменных без массива или структуры?

Ответы [ 3 ]

7 голосов
/ 09 сентября 2010

Быстрый и ненужный ответ - создать структуру для хранения всех параметров и передать указатель

3 голосов
/ 09 сентября 2010

Один из способов - передать массив или структуру.

Это способ . Указатель на структуру, то есть.

что если я хочу передать несколько переменных без массива или структуры?не повезло.Вам нужен массив или указатель на структуру.

1 голос
/ 09 сентября 2010

Вы можете передать буферный поток void * и, если вы знаете длины, вы можете получить к ним доступ. Это похоже на реализацию GArrays .

Как вы их создаете?

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

ПРИМЕЧАНИЕ: Вышеприведенный код не является компилируемым кодом C. Надо над этим работать.

Вы можете использовать что-то из перечисленного выше.

Позже вы можете получить доступ к переменным, поскольку вы уже знаете размер

...