I have the following:
   class DThread
   {
      virtual void run()=0;
    _beginthreadex(NULL,0,tfunc,this,0,&m_UIThreadID);  // class itself being passed as param to thread function...
    static unsigned int __stdcall tfunc(void* thisptr) 
        {
            static_cast<DThread*>(thisptr)->run();
            return 0;
        }
//other stuff
}
The run function is implemented in a derived class.
Why is the function that's being called in the thread being called through a cast this pointer?  Is this good practise?
Can't it just be called directly?
The actual function needing to run is in the derived class.
My question is
_beginthreadex expects a (stdcall) C style function, it cannot use a C++ member function as it has no knowledge of C++. The way to get a member function running is to pass a pointer to an object and call the member function inside that function. Such a function is often called a trampoline.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With