sto provando a creare un nuovo thread con una classe "CameraManager" ma ho il seguente errore:non può convertire '* void (MyClass :: *) (void *) in void * (*) (void *) nella funzione pthread_create
cannot convert '*void(CameraManager:: *)(void*) to void*(*)(void*) in pthread_create function
ho definito nel file cameramanager.h:
public:
void *dequeueLoop(void *ptr);
e nel cameramanager.cpp
void CameraManager::startDequeuing(){
dequeuing = true;
dequeueThreadId = pthread_create(&dequeueThread, NULL, &CameraManager::dequeueLoop, NULL);
}
void *CameraManager::dequeueLoop(void *ptr){
while(dequeuing){
highSpeedCamera->dequeue();
highSpeedCamera->enqueue();
}
io non voglio declar e dequeueLoop come funzione statica ho anche provato a dichiarare dequeueLoop come una funzione friend di classe nel modo seguente ma non ha scope sulle variabili di classe 'highSpeedCamera' e 'dequeuing' e il compilatore mi dice anche che 'dequeueLoop' era non dichiarati in questo ambito
per fare dequeueLoop una funzione amico ho fatto:
cameramanager.h
public:
friend void *dequeueLoop(void *ptr);
cameramanager.cpp
void CameraManager::startDequeuing(){
dequeuing = true;
dequeueThreadId = pthread_create(&dequeueThread, NULL, &CameraManager::dequeueLoop, NULL);
}
void *dequeueLoop(void *ptr){
while(dequeuing){
highSpeedCamera->dequeue();
highSpeedCamera->enqueue();
}
}
Dove sto sbagliando?
Perché non si desidera rendere una funzione membro statico. Puoi sempre passare 'this' come argomento in modo da ottenere l'accesso ai dati dei membri privati. – pstrjds