c ++ pthread无法正常工作

时间:2014-02-06 17:55:10

标签: c++ multithreading

我有一个创建线程的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){}

它运作正常。我错过了什么?

3 个答案:

答案 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在这里。我希望你没有错过它。好奇。