线程函数: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发消息的方式进行通知
另外,就这么简单的一个处理过程,你就另开一个线程去处理,要知道线程属于核心对象,系统开销相对较大,这么搞是不是有点儿小题大做,得不偿失了?
