mithras
15-09-2002, 21:21
hab folgende struktur:
struct empfangen{
int sockfd;
int rw;
} *em;
D.h. ich habe einen Zeiger auf eine Instanz einer Struktur.
Die Struktur wurde außerhalb der main() bzw. außerhalb irgendeiner anderen Fkt. also global wie alle Strukturen definiert.
Nun kann ich ja an jeder Stelle im Programm über em->sockfd auf sockfd und em->rw auf rw zugreifen.
Das widerspricht doch aber eigentlich dem Konzept strukurierter Programmierung, in der versucht wird alles lokal innerhalb einer Fkt zu defenierern bzw. zu verwenden?!
Ich musste die obige Strukur definieren da ich mit Threads arbeite:
if(pthread_create(&t1, NULL, (void *)&getting, &arg) != 0) // Es wird neuer Thread aufgemacht,
{
perror("recv() failed");
fprintf(stderr, "Fehler bei Thread ......\n");
exit(0);
}
arg ist ein Argument das ich der Fkt. getting übergeben kann, ich kann jedoch nur ein argument übergeben, da ich aber mehrere Argumente übergeben möchte, muss ich mit einer Struktur arbeiten. Habe auch schon versucht das ganze folgerndermaßen zu machen, also mit einer Struktur ohne einen Zeiger auf die Instanz der Strukrur zu richten:
getting(struct em x);
struct empfangen{
int sockfd;
int rw;
} em;
Nun könnte ich ja z.B. der Fkt getting per empfangen(em) die Struktur übergeben, und in der Fkt mit x.sockfd und x.rw auf die Elemente zugreifen, wenn ich em aber per Thread einer Fkt. übergeben möchte, gibts eine fehlermeldung beim compelieren! Sodass ich das ganze mit opbier Struktur (mit Zeiger) und der Fkt. in pthread dann keine Argument übergebe, da ich ja aufgrund des Zeigers direkt auf die Elemente zugreifen kann!?
Kann mir jmd. helfen?
Syntax um einen Thread zu erstellen:
int pthread_create(pthread_t newthread, pthread_attr_t *attribute,
void *(*funktion)(void *), void *arg);
(von http://www.pronix.de/ckurs/ckurs211.html)
struct empfangen{
int sockfd;
int rw;
} *em;
D.h. ich habe einen Zeiger auf eine Instanz einer Struktur.
Die Struktur wurde außerhalb der main() bzw. außerhalb irgendeiner anderen Fkt. also global wie alle Strukturen definiert.
Nun kann ich ja an jeder Stelle im Programm über em->sockfd auf sockfd und em->rw auf rw zugreifen.
Das widerspricht doch aber eigentlich dem Konzept strukurierter Programmierung, in der versucht wird alles lokal innerhalb einer Fkt zu defenierern bzw. zu verwenden?!
Ich musste die obige Strukur definieren da ich mit Threads arbeite:
if(pthread_create(&t1, NULL, (void *)&getting, &arg) != 0) // Es wird neuer Thread aufgemacht,
{
perror("recv() failed");
fprintf(stderr, "Fehler bei Thread ......\n");
exit(0);
}
arg ist ein Argument das ich der Fkt. getting übergeben kann, ich kann jedoch nur ein argument übergeben, da ich aber mehrere Argumente übergeben möchte, muss ich mit einer Struktur arbeiten. Habe auch schon versucht das ganze folgerndermaßen zu machen, also mit einer Struktur ohne einen Zeiger auf die Instanz der Strukrur zu richten:
getting(struct em x);
struct empfangen{
int sockfd;
int rw;
} em;
Nun könnte ich ja z.B. der Fkt getting per empfangen(em) die Struktur übergeben, und in der Fkt mit x.sockfd und x.rw auf die Elemente zugreifen, wenn ich em aber per Thread einer Fkt. übergeben möchte, gibts eine fehlermeldung beim compelieren! Sodass ich das ganze mit opbier Struktur (mit Zeiger) und der Fkt. in pthread dann keine Argument übergebe, da ich ja aufgrund des Zeigers direkt auf die Elemente zugreifen kann!?
Kann mir jmd. helfen?
Syntax um einen Thread zu erstellen:
int pthread_create(pthread_t newthread, pthread_attr_t *attribute,
void *(*funktion)(void *), void *arg);
(von http://www.pronix.de/ckurs/ckurs211.html)