GetDlgItemText和多线程

时间:2017-04-24 06:57:55

标签: c++ multithreading visual-c++ mfc

所以我一直在尝试将多线程的概念实现到我正在制作的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。看起来加法可能已经解决了吗?

0 个答案:

没有答案