Hello,
Eli ongelma on seuraava:
Yritin tämän esimerkin pohjalta tehdä monisäikeistä ohjelmaa:http://www.linuxselfhelp.com/HOWTO/C++Programming-HOWTO-18.html
Ohjelman ajo ei koskaan valu tuossa EntryPointiin, missä vika.
käytössäni on FedoraCore 13, g++ versio 4.4.4 20100630.
koodin kääntö ja linkitys onnistuu ilman virheitä eli käytän tuota -lpthread vipua.
Tässä koodia:
class Thread
{
public:
Thread();
int Start(void * arg);
protected:
int Run(void * arg);
static void * EntryPoint(void*);
virtual void Setup();
virtual void Execute(void*);
void * Arg() const {return Arg_;}
void Arg(void* a){Arg_ = a;}
private:
THREADID ThreadId_;
void * Arg_;
};
int Thread::Start(void * arg)
{
Arg(arg); // store user data
return pthread_create(&ThreadId_, NULL, Thread::EntryPoint, (void*)this );
}
int Thread::Run(void * arg)
{
Setup();
Execute( arg );
}
void * Thread::EntryPoint(void * pthis)
{
// ohjelma ei valu koskaan tänne
Thread * pt = (Thread*)pthis;
pthis->Run( Arg() );
}
virtual void Thread::Setup()
{
// Do any setup here
}
virtual void Thread::Execute(void* arg)
{
// Your code goes here
while(1)
{
// koodia jne...
}
}
// itse koodin testaus
int main()
{
int ret = -1;
Thread *p = NULL;
p = new Thread();
if(p)
{
ret = p->Start((void*)str);
// ret = 0, joten thread on luotu.
}
if(p)
delete p;
}
Tuo thread_create palauttaa 0:llan joka viittaa siihen että säikeen luonti onnistui,
kuitenkaan entrypointiin ei pääse? missä vika?
/Kingpin