Structures and Threads - Referenzen übergeben (nach refactoring kaputt)
-
Hallo,
in einem Programm hatte ich eine Pipe aufgebaut, dessen Enden ich jeweils aus einem Pthrerad geladen/geschrieben habe. Das hat soweit gut funktioniert:
...
int pipeDesc[2];
void *WriteTo() {
write(pipeDesc[1], buffer, numBytes);
}
pipe(pipeDesc);
rc = pthread_create(&threads[0], NULL, Listen, NULL)
...nun habe ich meinen code aufgeräumt und in mehrere Files verlagert. Die Wichtigen Informationen sollen als Referenz mit in die Initialisierung der Threads gegeben werden und in einer struct zusammengefasst sein.
in main.c, includiere ich pipeinfo.h, der Inhalt von pipeinfo.h ist im wesentlichen folgender:
...
typedef struct pipeinfo {
int numBytesOfBuffer;
int framesPerBuffer;
int *pipeIn;
int *pipeOut;
} pipeinfo_t;
...worauf hin die gekürtzte Fassunfg von main.c so weitergeht:
int pipeDesc[2];
pipeinfo_t pipeinfo;
pipeinfo.pipeIn = &pipeDesc[1];
pipeinfo.pipeOut = &pipeDesc[0];und der Thread welcher in die neue Datei ausgelagert wurde, so erzeugt wird:
threadErrorFlag = pthread_create(&threads[1], NULL, Recording, &pipeinfo);Recording soll die Referenz des structs entgegennehmen und den Puffer lesen/bzw schreiben:
...
void *Recording(pipeinfo_t *pipeinfo) {
...in der headerfile habe ich dies mit :
void *Recording(pipeinfo_t *);definiert.
Leider ist die Pipe leer und er beendet ein
while (read(pipeinfo->pipeOut, readbuffer, pipeinfo->numBytesOfBuffer) > 0)sofort.
Ich nehme an, ich habe die Referenzen und Pointer falsch gemacht. Kann mir jemand helfen?Danke,
Peter
-
Hi,
wenn ich die Pipes so in das struct übergebe:
pipeinfo.pipeIn = pipeDesc[1];
pipeinfo.pipeOut = pipeDesc[0];dann geht es.
Kann mir jemand erjklären warum das so ist? Ich dachte ich muss die Referenz einer Varible angeben um dem Pointer zu sagen wohin er schreiben soll.Ich bin verwirrt. Vieleicht hat jemand die Zeit mir etwas Licht ins dunkel zu bringen.
Danke.