2011-07-19 71 views
2

我需要同时运行两个独立的进程。一个是在端口X上进行侦听,并在接收到数据时发送数据,另一个正在做其他一些事情。运行两个线程[c]

香港专业教育学院尝试这样: 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’

这里有什么问题?

我不太了解手册,所以我在这里问。

感谢您的任何帮助!

+0

你在问什么?上面的文字没有问题。 – littleadv

+0

@Shaggy你能告诉我们你想达到什么吗? – Allwyn

+0

问题补充 – shaggy

回答

5

使用getAddressoperate代替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对象。

+0

谢谢,我做了,但仍然:'iret1 = pthread_create(&thread1,NULL,getAddress,HERE)'我应该写什么而不是'HERE'? 'void * getAddress(){...' – shaggy

+0

@shaggy - 检查新的答案。 –

+0

太棒了!但是,我想运行不带任何参数/ arg的'getAddress',如何实现? – shaggy

1
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 *)