Запуск двух потоков [c] - PullRequest
2 голосов
/ 19 июля 2011

Мне нужно запустить два отдельных процесса одновременно. Один просто прослушивает порт X и отправляет данные, когда получает sth, второй выполняет какие-то другие действия.

Я пробовал это: pthread_t thread1, thread2; int iret1, iret2;

iret1 = pthread_create( &thread1, NULL, getAddress(), NULL);

iret2 = pthread_create( &thread2, NULL, operate(), (struct IPlist) *IPlist);

В первом я хотел бы запустить get(Address) - часть прослушивания и отправки, во втором мне нужно запустить operate() с одним аргументом: *IP list //(struct IPlist *IPlist)

НО, он показывает ошибки:

warning: passing argument 3 of ‘pthread_create’ makes pointer from integer without a cast /usr/include/pthread.h:225: note: expected ‘void * (*)(void *)’ but argument is of type int

error: incompatible type for argument 4 of ‘pthread_create’ /usr/include/pthread.h:225: note: expected ‘void * __restrict__’ but argument is of type ‘struct IPlist’

Что здесь не так?

Я не очень понимаю руководство, поэтому спрашиваю здесь.

Спасибо за любую помощь !!

Ответы [ 2 ]

5 голосов
/ 19 июля 2011

Используйте getAddress и operate вместо getAddress() и operate() при вызове pthread_create.Вы должны предоставить functions вместо их возвращаемых значений.

Вам также необходимо предоставить данные этим потокам через последний аргумент.Она должна выглядеть следующим образом:

struct IPlist *IPlist;
iret1 = pthread_create( &thread1, NULL, getAddress, IPlist);
iret2 = pthread_create( &thread2, NULL, operate, IPlist);

И ваши функции должны быть такими:

void* getAddress(void* data) { struct IPlist *IPlist = data ; /* ... */ }
void* operate(void* data) { struct IPlist *IPlist = data ; /* ... */ }

Если ваша программа продолжает зависать, обязательно проверьте pthread_mutex объекты.

1 голос
/ 19 июля 2011
I think you should pass address of function.

struct IPlist *IPlist;
iret1 = pthread_create( &thread1, NULL, (void *) &getAddress, (void *)IPlist);
iret2 = pthread_create( &thread2, NULL, (void *) &operate, (void *)IPlist);

assuming that function decleration is 

 - void getAddress (void *)

 and 

 - void operate (void *)

.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...