Estoy tratando de crear un nuevo hilo con una clase "CameraManager" pero tengo el siguiente error:no se puede convertir '* void (MyClass :: *) (void *) en void * (*) (void *) en la función pthread_create
cannot convert '*void(CameraManager:: *)(void*) to void*(*)(void*) in pthread_create function
i definido en el archivo cameramanager.h:
public:
void *dequeueLoop(void *ptr);
y en el 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();
}
no quiero a declar e dequeueLoop como función estática también intenté declarar dequeueLoop como una función de amigo de clase de la siguiente manera, pero luego no tiene alcance en las variables de clase 'highSpeedCamera' y 'dequeuing' y el compilador también me dice que 'dequeueLoop' era no declarado en este ámbito
para hacer una función dequeueLoop amigo que hice:
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();
}
}
¿Dónde estoy haciendo mal?
¿Por qué no quieres que sea una función de miembro estático? Siempre puede pasar 'this' como argumento para que tenga acceso a sus datos de miembros privados. – pstrjds