Skapa en pthread tråd av en medlemsfunktion i C++

Tråden skapades och har fått 4 svar. Det senaste inlägget skrevs .
1

Hej igen alla C++ programmerare, nu har det tyvärr gått så långt att jag behöver lite hjälp. Titta på den här koden:

class SoundAlarm : private DOutput {
public:
      .
      .
private:
      .
      void *loop();
      pthread_t loop_t;
};

SoundAlarm::SoundAlarm(...) : DOutput(...)
{
	.
        .
	pthread_create(&loop_t, NULL,(void*) &loop, this);
}

Med gcc 3.3 så kunde man enkelt skapa trådar på ovan nämnda sätt. Man fick visserligen en varning men det var ju inte så farligt så länge som det fungerade. Gcc 4.0 har däremot blivit mycket striktare och tillåter inte alls den koden. Jag har experimenterat runt en del men än så länge så har inget hjälpt. Så hur ska man då skapa en tråd av en medlemsfunktion på rätt sätt?

Jonas

  • Medlem
  • Göteborg
  • 2005-07-28 21:05

Du bör kunna använda en C funktion som "klister" enligt nedan:

create-raden ändras till:
pthread_create(&loop_t, NULL,(void*) &c_func, this);

En vanlig C-funktion:
void *c_func(void *c)
{
return ((SoundAlarm *)c)->loop();

}

loop måste vara public nu.

Fungerar tyvärr inte. Jag får dock ett annat felmeddelande:

SoundAlarm.cpp:24: error: invalid conversion from 'void*' to 'void* (*)(void*)
SoundAlarm.cpp:24: error: initializing argument 3 of 'int pthread_create(_opaque_pthread_t**, const pthread_attr_t*, void* (*)(void*), void*)'

Något annat förslag??

  • Medlem
  • Göteborg
  • 2005-07-30 18:16

Ursäkta mig, raden ska vara:
pthread_create(&loop_t, NULL,c_func, this);

Verkar fungera nu. Tack.

1
Bevaka tråden