Witam. Wertując po google z moim problemem natrafiłem na ten post, problem prawie zniknął (uciszył się kompilator) ale program nie działa (segment). Różnica między postem powyżej a moim polega na tym, że ja
zamiast wskaźnik na obiekt posiadam
iterator na obiekt. Do rzeczy:
device.hh:
Kod: Zaznacz cały
class device{
public:
...
void GenerujCLK();
static void* Thread(void *arg);
};
// oraz lista obiektow device
class program {
private:
list<device> list_of_devices;
...
public:
list<device>::iterator ZnajdzUrzadzenie(unsigned int _adr);
...
};
device.cpp:
Kod: Zaznacz cały
void *device::Thread(void *net)
{
device *self = (device *)net;
self->GenerujCLK();
}
probowalem takze z takim device.cpp:
Kod: Zaznacz cały
void *device::Thread(void *net)
{
list<device>::iterator *self = (list<device>::iterator *)net;
(*self)->GenerujCLK();
}
wywolanie main.cpp:
Kod: Zaznacz cały
int main() {
pthread_t watek_czasu;
program symulator(2,2);
list<device>::iterator _tmp = symulator.ZnajdzUrzadzenie(8);
pthread_create(&watek_czasu,NULL,&device::Thread,NULL);
// chodzi o to by watek wywolal _tmp -> GenerujCLK(); :(((
...
};
Jak napisalem w komentarzu, chodzi o to by watek wywolal _tmp -> GenerujCLK(); , _tmp jest interatorem z listy obiektów klasy device, która to z kolei zawiera metodą, która musi wykonywać się w tle działania programu z wykorzystaniem wątków. Proszę o pomoc, google nic nie mówi o iteratorach i wątkach... ;/
Blad pamieci na pewno lezy po stronie tych funkcji i/lub watkow, bo normalne wywolanie w main.cpp: _tmp -> GenerujCLK(); dziala az cieszy
Pozdrawiam