我写的代码里有个线程函数,处理传进来的数据并显示到主窗口的控件上,因为是静态函数所以不能直接访问ui控件,我用UserData作为指针来传递ui控件,编译能够通过,但是接上CAN盒子运行,窗口就卡死,已经查明了就是 ((UI::MainWindow*)UserData)->NUMERIC_C1->setText(tempStr.setNum(c1));这个代码的问题,注释掉以后不会卡死。请问有什么解决办法吗?正确的访问UI控件的方法是怎么样的?
static DWORD __stdcall ThreadPDOTest(DWORD eventID, LPVOID pBuf, DWORD BufLen, LPVOID UserData )
{
int ERR1=-1, ERR2=-1,ERR3=-1,i=0
unsigned char data[8];
DWORD dwDataLen;
in data_in=0;
QSTring tempStr;
float c1=0,c2=0,c3=0,c4=0;
if(EventID==2)
{
for (i=0;i<=10;)
{
ERR1= ZCOMA_GetPDOIputData(hdChannel, 17, 0X191, data, &dwDataLen,0); //传入数据报文
if(ERR1==0)
{
c1=(float)((256*data[1]+data[0])-512)*1.5/1000; //计算电压
((UI::MainWindow*)UserData)->NUMERIC_C1->setText(tempStr.setNum(c1)); //将ui指针通过UserData传入,这个地方出现问题
c2=....;
........;
c3=...;
. .......;
}
}
}
}