我试图在一个对象中创建一个线程,但是我得到一个错误提示 '&' : illegal operation on bound member function expression.
读起来我看到我必须创建成员函数静态的,但是当我这样做时,我收到一条错误消息,提示 left of '.dac_ping' must have 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);
}
};
最佳答案
static
函数不绑定(bind)到特定实例;没有 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
}
关于c++ - 在成员函数上使用 CreateThread 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8025049/