我想在C ++中调用实例化类的函数时显示我遇到的问题。
我正在使用一个单独的线程来监听TCP套接字,因此当数据到来时,我想调用一个函数来开始执行任务。我正在使用process.h
库和_beginthread(socket_init,0,NULL);
来启动带有socket_init()
函数的线程,该函数启动了侦听器。
为了让你了解情况,就在线程初始化调用之前,我有这个:
CPhoneDlg dlg = new CPhoneDlg;
m_pMainWnd = &dlg;
此类声明了此函数:
CTapiLine* CPhoneDlg::GetActiveLine() {...}
所有这一切的重点是,能够从单独线程中正在执行的函数中调用GetActiveLine()
。
为此,我尝试这样做:
CTapiLine* line = dlg.GetActiveLine();
但它只是不知道dlg
是什么,当我尝试编译代码时显示“未声明的标识符”。
有没有办法让dlg
对象可见,所以它的方法被单独的线程“调用”?
答案 0 :(得分:0)
前几天我不得不弄清楚这个问题,所以我想我可以提供帮助。您需要将对象传递给您的类进入线程函数。请参阅以下代码:
DWORD WINAPI PhoneThread(LPVOID lpParam)
{
CPhoneDlg *phoneDlg = reinterpret_cast<CPhoneDlg *>(lpParam);
CTapiLine* line = phoneDlg.GetActiveLine();
}
并实例化这样的线程(来自您的班级内部!):
CreateThread(NULL, 0, PhoneThread, this, 0, NULL);
只要GetActiveLine()
是公开的,您就应该能够让它像这样工作。
我正在做的是将指向主类的指针作为LPVOID传递。进入线程后,可以使用reinterpret_cast
将其强制转换为主类的类型。现在,您可以从线程中获得指向该类的指针,并且可以访问公共函数和变量。