2016-04-06 17 views
0

C言語のスレッドで作業しているのは初めてで、関数の引数を渡すときに問題が発生しています。何らかの理由で私はこのスレッドを作成する必要があります。 私はサーバーにメッセージを送信する機能を持っています。私の関数のヘッダは次のとおりです。C - pthread引き数

void* sender (char* payload, void (*Callback)(char*)) 

その後の私のメイン(簡体字)、私は次のスレッドを作成します。

main() 
{ 
    pthread_t sender_id; 
    int err_s; 

    err_s = pthread_create (&sender_id, NULL, &sender, NULL); 
} 

問題は、私の機能の送信者が、私はこれを取得していますので、多くの引数を持っているということですエラー:

sombodyが私を助けることができたら、私は感謝しています。

+4

これは不可能です。スレッド内で使用できるすべての関数は、void * thread_func(void * arg)というシグネチャを持っていなければなりません。あなたの2つの引数payloadとコールバックが含まれている代わりに、構造体を使用することをお勧めします。 –

答えて

0

あなただけ言うことができます構造を作成することができます。

struct thread_prm 
{ 
char *payload; 
void (*Callback)(char*) cb; 
} 

をそして、あなたはちょうどこのように見える構造を割り当て、最後の引数としてpthread_createのためにそれを渡します。

struct thread_prm *arg; 
arg = malloc(sizeof(struct thread_prm)); 
(assign arg members to something) 
pthread_create(&sender_id, NULL, &sender, arg); 

そして、あなたが送信者を変更します:このような

void* sender (void *arg) 
{ 
struct thread_prm *_arg = arg; 
char* payload; 
void (*Callback)(char*) cb; 

payload = _arg->payload; 
cb = _arg->cb; 
... 
} 
+1

何らかの理由で送信側関数のシグネチャを変更できない場合は、この構造体をvoid *として受け取り、送信側で使用するようにキャストするラッパー関数を作成します – klog

関連する問題