스레드를 생성하는 classA가 있고 변수가 false로 설정 될 때까지 스레드가 실행되기를 원합니다.C++ pthread가 작동하지 않습니다.
ClassA::ClassA():
m_bContinue(true),
{
pthread_mutex_init(&m_mutex, NULL);
pthread_create(&m_thWorkThread, NULL, &ClassA::ThreadProc, this);
}
내가 스레드 pClassA-만큼 실행> 계속()가 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");
}
계속해서 m_bcontinue가 생성자에서 true로 설정됩니다.
bool ClassA::Continue()
{
return bContinue;
}
루프를 실행하면 "while while"이 인쇄되고 프로그램이 중지됩니다. 내가 strace 할 때, 나는 + + SIGSEGV +++에 의해 살해되었다는 메시지를 보았다. 그리고 내가 좋아하는 while 루프 변경할 때 :
while(1){}
올바르게 작동합니다. 내가 뭘 놓치고 있니?
"정상적인 기능"이란 무엇입니까? 제 경우에는 ThreadProc을 정적 멤버 함수로 정의합니다. ThreadProc 함수로 다른 클래스를 정의한다는 것을 의미합니까? –
@AvbAvb 아, 정적입니다. 정상적으로는 비회원 함수를 의미하지만 정적이라도 괜찮습니다. 그렇다면 코드가 정상적으로 작동하고 루프가 손상되는 것입니다. 아마도 다른 곳에서는 힙 손상 때문일 것입니다. –