C++ 在成员函数上使用CreateThread时出现问题

C++ 在成员函数上使用CreateThread时出现问题,c++,multithreading,createthread,C++,Multithreading,Createthread,我试图在一个对象中创建一个线程,但是我得到了一个错误,它是“&”:绑定成员函数表达式上的非法操作。阅读时,我看到我必须使成员函数为静态,但当我这样做时,我得到一个错误,它是左侧。dac_ping“必须具有class/struct/union 这就是我正在尝试的: class Dac { private: network_com com; HANDLE ping_thread; DWORD dping_thread;

我试图在一个对象中创建一个线程,但是我得到了一个错误,它是
“&”:绑定成员函数表达式上的非法操作。
阅读时,我看到我必须使成员函数为静态,但当我这样做时,我得到一个错误,它是
左侧。dac_ping“必须具有class/struct/union

这就是我正在尝试的:

class Dac 
    {
    private:
        network_com com;
        HANDLE  ping_thread;
        DWORD   dping_thread;

        static DWORD WINAPI ping_loop(void* param)
            {
            while ( com.dac_ping() == 0)
                Sleep(900);

            return 1; //since this is an infinite loop, if the loop breaks, it has failed
            }


    public:
        Dac()
            {
            }

        ~Dac()
            {
            }

        void find_dac()
            {
            com.find_dac();
            com.print_dac_info();
            }


        void connect_and_keep_alive()
            {
            if (com.dac_connect() == 0)
                ping_thread = CreateThread (NULL , 0, ping_loop, NULL, 0, &dping_thread);
            }

    };

静态
函数不绑定到特定实例;没有
指针,您也没有“成员变量”。您可以将
指针作为参数传递给函数,然后将其强制转换为
Dac*
并从中访问成员变量

所以你可以

ping_thread = CreateThread (NULL , 0, ping_loop, (LPVOID)this, 0, &dping_thread);
并将您的
ping\u循环
更改为:

static DWORD WINAPI ping_loop(void* param)
{
    Dac* dac = (Dac*)param;
    while ( dac->com.dac_ping() == 0)
        Sleep(900);

    return 1; //since this is an infinite loop, if the loop breaks, it has failed
}

静态
函数不绑定到特定实例;没有
指针,您也没有“成员变量”。您可以将
指针作为参数传递给函数,然后将其强制转换为
Dac*
并从中访问成员变量

所以你可以

ping_thread = CreateThread (NULL , 0, ping_loop, (LPVOID)this, 0, &dping_thread);
并将您的
ping\u循环
更改为:

static DWORD WINAPI ping_loop(void* param)
{
    Dac* dac = (Dac*)param;
    while ( dac->com.dac_ping() == 0)
        Sleep(900);

    return 1; //since this is an infinite loop, if the loop breaks, it has failed
}