当前位置: 代码迷 >> VC/MFC >> vs2012线程函数体编译异常
  详细解决方案

vs2012线程函数体编译异常

热度:190   发布时间:2016-05-02 03:50:34.0
vs2012线程函数体编译错误
线程函数:static UINT Thread(void *param);
在线程函数体内:
int axj=1;
if(m_com1.GetCurSel()>=0)
{

CString sbuf;
m_com1.GetLBText(m_com1.GetCurSel(), sbuf);
axj=atoi(sbuf);

}
///////////////////////////////////////////////
m_com1是下拉式列表框中添加的CComboBox型的变量
vs2012编译出现错误error C2228: left of '.GetCurSel' must have class/struct/union
前提线程函数必须是静态的
这为什么啊,怎么改,知道的帮忙好不好,谢谢了


------解决思路----------------------
线程函数中就不要直接操作UI控件吧。你直接将CComboBox中的数据作为线程函数的参数传递给线程不是会好一些~
------解决思路----------------------
编译器不知道 m_com1 是什么
------解决思路----------------------
你这明显的是变量访问域的问题嘛,你的m_com1是某个类的成员变量吧,线程函数又不属于那个类的成员函数,当然访问不了的!
------解决思路----------------------
静态函数调用非静态变量问题出错了,,,,

1、传this指针作为参数;CXXXDlg* tempDlg=(CXXXDlg*)param;然后可以if(tempDlg->m_com1.GetCurSel()>=0)

2、定义一个全局对话框变量,CXXXDlg* g_Dlg=NULL;OnInitDialog函数里把this赋值给g_Dlg;然后可以直接if(g_Dlg->m_com1.GetCurSel()>=0)

不过有时候线程中操作“控件”会出错(中断),可以像2楼说的那样:直接将CComboBox中的数据作为线程函数的参数传递给线程。
------解决思路----------------------
正如LS所说的,不要在线程中直接操作UI的东东,如果可以的话,干嘛还要另开一个线程呢?在线程中只做数据处理,如果需要跟UI交互,数据处理完了通过给UI发消息的方式进行通知

另外,就这么简单的一个处理过程,你就另开一个线程去处理,要知道线程属于核心对象,系统开销相对较大,这么搞是不是有点儿小题大做,得不偿失了?
  相关解决方案