繁体   English   中英

C ++ pthread不起作用

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM