我有一个创建线程的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;
}
当我运行它时,它只进入循环一次并打印&#34; while&#34;和程序停止。当我做strace时,我看到了SIGSEGV +++杀死了+++的消息。 当我改变while循环时:
while(1){}
它运作正常。我错过了什么?
答案 0 :(得分:0)
您无法使用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
。
答案 1 :(得分:0)
A类型的对象的生命周期是否比线程短?似乎对象A太快死了。使用while(1)
,您不再引用A。
答案 2 :(得分:0)
快速提问。 pthread_join在这里。我希望你没有错过它。好奇。