[英]c++ pthread not working
我有一个classA,它创建一个线程,并且我希望线程运行直到变量设置为false。
我创建如下线程:
ClassA::ClassA():
m_bContinue(true),
{
pthread_mutex_init(&m_mutex, NULL);
pthread_create(&m_thWorkThread, NULL, &ClassA::ThreadProc, this);
}
我希望线程只要pClassA-> Continue()返回true就可以运行。
void* ClassA::ThreadProc(void *p) //ThreadProc defined as static member function
{
ClassA *pClassA = reinterpret_cast<ClassA*>(p);
if(pClassA != NULL)
{
while(pClassA->Continue())
{
printf("in the while \n ");
}
}
else
printf("pClassA null \n");
}
Continue返回m_bcontinue,该值在构造函数中设置为true。
bool ClassA::Continue()
{
return bContinue;
}
当我运行它时,它只进入while循环一次,并打印“ while中”,然后程序停止。 当我执行strace时,我看到消息+++被SIGSEGV +++杀死。 当我更改while循环时,例如:
while(1){}
它工作正常。 我想念什么?
您不能使用pthread_create
启动成员函数。 而是使用常规函数, this
函数传递给它并调用所需的函数:
void *ThreadProc (void *p)
{
reinterpret_cast<ClassA*>(p)->ThreadProc (p);
return 0;
}
...
pthread_create(&m_thWorkThread, NULL, &ThreadProc, this);
或者,可以使用c ++ 11及其std::thread
来启动类成员函数。
类型A的对象的生存期可以短于线程吗? 看来对象A死得太早了。 使用while(1)
,您不再引用A。
快速提问。 pthread_join在哪里? 希望您没有错过。 只是好奇。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.