Ich versuche, einen neuen Thread mit einer Klasse "CameraManager" zu erstellen, aber ich habe die folgende Fehlermeldung:kann '* void (MyClass :: *) (void *) in void * (*) (void *) in der Funktion pthread_create nicht konvertieren
cannot convert '*void(CameraManager:: *)(void*) to void*(*)(void*) in pthread_create function
i definiert in der cameramanager.h Datei:
public:
void *dequeueLoop(void *ptr);
und in der 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();
}
ich will nicht declar e dequeueLoop als statische Funktion Ich habe auch versucht, dequeueLoop als Klassenfreund-Funktion auf die folgende Weise zu deklarieren, aber dann hat es keinen Spielraum für Klassenvariablen 'highSpeedCamera' und 'dequeuing' und der Compiler sagt mir auch, dass 'dequeueLoop' war nicht in diesem Bereich erklärt
einen Freund Funktion zu machen dequeueLoop ich tat:
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();
}
}
Wo mache ich falsch?
Warum möchten Sie es nicht zu einer statischen Elementfunktion machen. Sie können 'this' immer als Argument übergeben, um Zugriff auf Ihre privaten Mitgliedsdaten zu erhalten. – pstrjds