2016-04-06 5 views
0

Es ist das erste Mal, dass ich mit Threads in C arbeite und ich bekomme Probleme übergeben Funktionsargumente. Aus irgendwelchen Gründen muss ich diesen Thread erstellen. Ich habe eine Funktion, die Nachrichten an einen Server sendet. Der Header meiner Funktion ist:C - pthread Argumente

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

Dann auf meinem Haupt (vereinfacht), erstelle ich die folgenden Threads:

main() 
{ 
    pthread_t sender_id; 
    int err_s; 

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

Das Problem ist, dass meine Funktion Absender viele Argumente hat so ich dies immer Fehler:

note: expected 'void * (*)(void *)' but argument is of type 'void * (*)(char *, void (*)(char *))' 

Ich wäre dankbar, wenn Sombody mir helfen könnte.

+4

Dies ist nicht möglich. Jede Funktion, die in einem Thread verwendet werden kann, muss folgende Signatur haben: void * thread_func (void * arg). Ich schlage vor, dass Sie stattdessen eine Struktur verwenden, die Ihre zwei Argumente Payload und Callback enthält. –

Antwort

0

Sie können nur eine Struktur erstellen können sagen:

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

Und Sie nur eine Struktur zuordnen, die wie folgt aussieht und geben es als das letzte Argument pthread_create. Wie folgt aus:

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

Und Sie ändern Absender:

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

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

Wenn Sie aus irgendeinem Grund die Signatur der Absenderfunktion nicht ändern können, erstellen Sie eine Wrapper-Funktion, die diese Struktur als void * empfängt und zur Verwendung mit dem Absender umsetzt – klog