在成员函数上使用CreateThread的问题

时间:2011-11-06 03:25:14

标签: c++ multithreading createthread

我正在尝试在对象中创建一个线程,但是我得到一个错误说'&' : illegal operation on bound member function expression.读取我看到我必须使成员函数静态,但是当我这样做时,我得到一个错误说{{ 1}}

这就是我想要的:

left of '.dac_ping' must have class/struct/union

1 个答案:

答案 0 :(得分:4)

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

所以你可以做到

ping_thread = CreateThread (NULL , 0, ping_loop, (LPVOID)this, 0, &dping_thread);

并将您的ping_loop更改为:

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
}