Nowe posty

Autor Wątek: przesyłanie argumentu do wątku - clone()  (Przeczytany 3983 razy)

jereq

  • Gość
przesyłanie argumentu do wątku - clone()
« dnia: 2010-07-21, 19:52:19 »
Witam,

od pewnego czasu nieudolnie próbuje przesłać strukturę jako argument do funkcji wywoływanej jako osobny wątek poprzez wywołanie clone(). Struktura wygląda następująco:

Kod: C [Zaznacz]
struct data {
       FILE* file;
       int delay;      
       } arg;
wywołuje to w następujący sposób:
Kod: C [Zaznacz]
pid_t pid = clone( &blink, (char*) stack + FIBER_STACK, SIGCHLD | CLONE_FS | CLONE_FILES | CLONE_SIGHAND | CLONE_VM, arg);
a funkcja jest następująca:
Kod: C [Zaznacz]

int blink(data argument){

...
jakis kod
...

return 0;
}

ale niestety program się nie kompiluje. W jaki sposób przesłać taki argument? Notabene, pojedynczą zmienną, np. typu int lub wskaźnik FILE* przesyła się bez problemu

chmooreck

  • Gość
przesyłanie argumentu do wątku - clone()
« Odpowiedź #1 dnia: 2010-07-21, 21:54:47 »
z man:
Kod: C [Zaznacz]
int clone(int (*fn)(void *), void *child_stack, int flags, void *arg)
czyli funkcja musi przyjmować wskaźnik. wystarczy, że zrobisz tak:
Kod: C [Zaznacz]
pid_t pid = clone( &blink, (char*) stack + FIBER_STACK, SIGCHLD | CLONE_FS | CLONE_FILES | CLONE_SIGHAND | CLONE_VM, &arg);

int blink(data * argument) { ... }

Zresztą kompilator Cię pewnie o tym poinformował. Na przyszłość czytaj co Ci che powiedzieć.

P.S. Proszę o stosowanie tagów BBCode. Tym razem poprawiłem ;-)