所以我一直在尝试将多线程的概念实现到我正在制作的MFC应用程序中。我使用了建议的方法here。它工作正常但我在使用线程工作时使用的数据时遇到了问题。
我会解释。
我正在制作一个简单的GUI来通过串口发送和接收数据。因此IDC_SEND中的数据是用户输入的,然后通过串行端口发送。我正在使用GetDlgItemText的WINAPI定义,但由于AfxBeginThread的控制功能被定义为静态函数,我不能这样做。所以我尝试了:: GetDlgItemText,但它调用CWnd定义,该定义需要一个或三个或四个(?)参数。
所以:: GetDlgItemText(IDC_SEND,CString文本)不起作用。 SetDlgItemText也会继续这个问题。
我已经尝试将数据移到控制函数之外,但由于它被定义为返回UINT类型,我无法获取接收到的数据。
相关代码
void CCommTest2Dlg::OnButton()
{
THREADSTRUCT *_param = new THREADSTRUCT;
_param->_this = this;
AfxBeginThread (StartThread, _param);
}
UINT CCommTest2Dlg::StartThread(LPVOID param)
{
THREADSTRUCT* ts = (THREADSTRUCT*)param;
AfxMessageBox ("Thread is started!");
//Opened Serial Port
//Writing data from Editbox
CString text;
::GetDlgItemText(IDC_SEND,text);//********ERROR HERE!!
serial.Write(text);
//At Receiver port data is wriiten into CString a.
CString a;
::SetDlgItemText( IDC_RECV, a);//Apparently this calls the SetDlgItemText from the CWnd class, and not the Windows API that takes more than one argument.
AfxMessageBox ((LPCTSTR)a);//This works, but I need the data in the EditBox.
//Closing Ports
delete ts; //Edit 1
return 1;}
一些定义:
static UINT StartThread (LPVOID param);
//structure for passing to the controlling function
typedef struct THREADSTRUCT
{
CCommTest2Dlg* _this;
} THREADSTRUCT;
UINT StartThread(void);
有什么想法?
PS:当我读到这个实现可能导致内存泄漏时,我还添加了最后的编辑1。看起来加法可能已经解决了吗?