簡體   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