Hilfe zu Thread

Gast #549431
Lesenswert?

Guten Morgen, ich verstehe die my_Thread Funktion nicht richtig.
Was geschieht hier: Thread* pthis=(Thread*)para;
und hier: pthis->ThreadFunction(pthis->callback);
1
DWORD WINAPI Thread::my_Thread(void* para)
2
{
3
    Thread* pthis=(Thread*)para; // ?
4
  if(pthis!=NULL)
5
  {
6
    pthis->ThreadFunction(pthis->callback);
7
    return 0;
8
  }
9
  return -1;
10
}
11

12
Headerdatei Thread.h
13

14
class Thread
15
{
16
 private:
17
      
18
 public:
19
         ....
20
         ....
21

22
         void* callback
23

24
  virtual void ThreadFunction(void*)=NULL;
25

26

27
  Thread();
28
  ~Thread();
29
 
30
 protected:
31

32
  static DWORD WINAPI my_Thread(void* para);
33
};
Persönliche Seite #549439
Lesenswert?

Die Funktion my_Thread ist eine statische Memberfunktion, innerhalb 
derer kein this-Pointer bekannt ist. Um nichtstatische Memberfunktionen 
aufrufen zu können oder um auf Membervariablen der Objektinstanz 
zugreifen zu können, ist dieser this-Pointer aber zwingend erforderlich.
Also wird der CreateThread/_beginthread als opaker Parameter übergeben 
und landet als nach wie vor opaker Parameter in my_Thread.

  Thread* pthis = (Thread *) para;

erzeugt daraus einen pseudo-this-Pointer "pthis", der Dereferenzierungen 
zulässt. (Das ist ein C-Typecast, C++-Freunde werden da sicherlich 
aufheulen.)

Damit die Threadfunktion virtuell überladen werden kann (wozu man das 
auch immer hier benötigen möge), wird aus der statischen über den 
pseudo-this-Pointer "pthis" ebenjene virtuell überladbare aufgerufen:

  pthis->ThreadFunction(pthis->callback);


Wozu die Membervariable "callback" dient, wirst Du der Implementierung 
entnehmen müssen.


Haben wir dieses Thema nicht bereits vor ein paar Tagen breitgetreten?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren