[C++] przesylanie struct do pthread_create w klasach

0

Chciałbym uruchomić wątek. Potrzebuje dla funkcji kilku danych, wiec jako argument podaję strukturę. W funkcji nie chcę operować bezpośrednio na podanej strukturze, ale na jej kopii.

void *graph::przeszukaj ( void *t ) {
	struct argum *temp;
	temp = (struct argum *) t;
	...
}

void graph::szukajSciezki () {
	struct argum obj;
	vector <pthread_t> watek(0);

	...
	for (int i = 0; i<ilJobow; i++) {
		...
		pthread_create( &watek[i], NULL, przeszukaj, (void *) &*&obj);
	}
	...
}

Kompilator zwraca:

graph.cpp: In member function ‘void graph::szukajSciezki()’:
graph.cpp:156: error: argument of type ‘void* (graph::)(void*)’ does not match ‘void* (*)(void*)’

Linia 156 to
pthread_create( &watek[i], NULL, przeszukaj, (void *) &*&obj);

Spodziewam się, że problem tkwi w wywoływaniu metody należącej do klasy, ale nie mam pomysłu jak powinienem ją wywołać, aby działało poprawnie. Liczę na Waszą pomoc.

0

W funkcji przeszukaj nie operujesz na kopi obj, tylko na samym obj.
Niewiem jak jest z klasami i pokrewnymi temu rzeczami, ale ja struktury przesylalem inaczej.
Lap kawalek kodu, ktory Ci to pokaze, mam nadzieje ze pomoze:

#include <stdio.h>
#include <pthread.h>

struct argum{
        int jeden;
        int dwa;
};

struct argum obj;

void *przeszukaj(void *t) {
        struct argum *temp = (struct argum*)t;
        struct argum tmp = obj;

        printf("%d\n", temp->jeden);
        printf("%d\n", obj.jeden);
        obj.jeden = 20;
        printf("%d\n", temp->jeden);
        printf("%d\n", obj.jeden);
        temp->jeden = 30;
        printf("%d\n", temp->jeden);
        printf("%d\n", obj.jeden);
        tmp.jeden = 40;
        printf("%d\n", tmp.jeden);
        printf("%d\n", obj.jeden);

        printf("ble\n");
}

int main(void) {
        pthread_t tid;
        obj.jeden = 10;
        obj.dwa = 20;

        pthread_create(&tid, NULL, przeszukaj, (void*)&obj);

        return 0;
}
0
(void *) &*&obj

co to za combo breaker??

1 użytkowników online, w tym zalogowanych: 0, gości: 1