【发布时间】:2019-06-10 22:04:12
【问题描述】:
我启动了一个后台线程来运行我的类函数,该任务作为无限循环执行,直到客户端决定停止。因此,由于在创建 pthread 时将类对象“this”传递给线程,我尝试将其强制转换为类对象但得到一个空对象,谁能向我解释为什么这不可行?
void Camera::init()
{
typedef void *(*ThreadFuncPtr)(void *);
this->quit=false;
pthread_create(&acq, NULL, (ThreadFuncPtr)(&Camera::_acquireImages), this);
}
void Camera::stopAcquire()
{
this->quit=true;
}
void Camera::_acquireImages(void* ptr)
{
auto obj = (Camera*) ptr; //obj after cast shows as NULL object
while(!obj->quit){
//do something
}
pthread_exit(NULL);
}
【问题讨论】:
-
Ted 下面的回答可能是正确的,但我建议用minimal reproducible example 扩充这个问题,这样他就可以证明是正确的,并且将来的提问者更容易在问题和答案之间建立联系。如果他是对的,请将
-pedantic添加到编译器选项中,您会收到一条很好的警告消息,建议您仔细查看Camera::_acquireImages,但如果您删除演员表,您会收到更好的消息。演员隐藏了你弄错的几件事。