run threads of class member function in c++

后端 未结 3 1966
别那么骄傲
别那么骄傲 2020-12-06 08:26

As the title says. The following is my code skeleton.

class CLASS
{
public:
    void A();
private:
    DWORD WINAPI B(LPVOID);
};

void CLASS::A()
{
    DWOR         


        
3条回答
  •  忘掉有多难
    2020-12-06 08:32

    You've to define your callback function as static function if it's member function!


    Better design : define a reusable class!

    From my previous answer: (with little modification)

    Even better would be to define a reusable class with pure virtual function run() to be implemented by the derived thread classes. Here is how it should be designed:

    //runnable is reusable class. All thread classes must derive from it! 
    class runnable
    {
    public:
        virtual ~runnable() {}
        static DWORD WINAPI run_thread(LPVOID args)
        {
            runnable *prunnable = static_cast(args);
            return prunnable->run();
        }
     protected:
        virtual DWORD run() = 0; //derived class must implement this!
    };
    
    class Thread : public runnable //derived from runnable!
    {
    public:
        void newthread()
        {
            CreateThread(NULL, 0, &runnable::run_thread, this, 0, NULL);
        }
    protected:
        DWORD run() //implementing the virtual function!
        {
             /*.....your thread execution code.....*/
        }
    }
    

提交回复
热议问题