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