从单独的线程

时间:2016-04-29 11:17:08

标签: c++ multithreading function visual-c++ call

我想在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对象可见,所以它的方法被单独的线程“调用”?

1 个答案:

答案 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将其强制转换为主类的类型。现在,您可以从线程中获得指向该类的指针,并且可以访问公共函数和变量。