关于AfxBeginThread的问题,高手大大们来帮忙啊~~~ 代码如下:
voidCSCommTestDlg::OnopenComm()//打开串口{打开部分代码省略*han=AfxBeginThread(testThread,(LPVOID)...
void CSCommTestDlg::OnopenComm() //打开串口
{
打开部分代码省略
*han = AfxBeginThread(testThread,(LPVOID)this,THREAD_PRIORITY_HIGHEST);
}
UINT CSCommTestDlg::testThread(CString text)
{
while(TRUE)
{
sendData(text);
Sleep(100);
}
}
void CSCommTestDlg::sendData(CString data)
{
CByteArray hexdata;
int len=String2Hex(data,hexdata);
CSCommTestDlg::m_ctrlComm.SetOutput(COleVariant(hexdata));
}
问题如下:
1、线程调用的语句是否有问题?
2、能否在线程中调用类中的控件和函数?如果可以要怎么调用?
目前就是这两个问题。。。。
VC我就是一小白。。。第一次弄,完全就是赶鸭子上架。以前一直做C#的。。。 展开
{
打开部分代码省略
*han = AfxBeginThread(testThread,(LPVOID)this,THREAD_PRIORITY_HIGHEST);
}
UINT CSCommTestDlg::testThread(CString text)
{
while(TRUE)
{
sendData(text);
Sleep(100);
}
}
void CSCommTestDlg::sendData(CString data)
{
CByteArray hexdata;
int len=String2Hex(data,hexdata);
CSCommTestDlg::m_ctrlComm.SetOutput(COleVariant(hexdata));
}
问题如下:
1、线程调用的语句是否有问题?
2、能否在线程中调用类中的控件和函数?如果可以要怎么调用?
目前就是这两个问题。。。。
VC我就是一小白。。。第一次弄,完全就是赶鸭子上架。以前一直做C#的。。。 展开
1个回答
展开全部
你是在类里写的线程函数?
这样编译可以过?
线程函数不是这样写的呢。
1.a.testThread应该被申明成static了吧,不然那你要好好看看了。
申明成static之后,那么sendData属于谁呢?
b.线程函数的参数只能是(LPVOID)类型的,你用(CString)我没试过这样写;
c.UINT的函数连返回值都没有。
2.用强制转换,CSCommTestDlg *pDlg = (CSCommTestDlg *)lparam;
然后通过pDlg 来操作控件和函数。
还是看看别人怎么起线程,然后再改代码吧。
最好看着格式改,不然多走冤枉路!
如果还不懂,那么建议看看C++语言吧。
不然开始就来起线程,也不是那么简单。
这样编译可以过?
线程函数不是这样写的呢。
1.a.testThread应该被申明成static了吧,不然那你要好好看看了。
申明成static之后,那么sendData属于谁呢?
b.线程函数的参数只能是(LPVOID)类型的,你用(CString)我没试过这样写;
c.UINT的函数连返回值都没有。
2.用强制转换,CSCommTestDlg *pDlg = (CSCommTestDlg *)lparam;
然后通过pDlg 来操作控件和函数。
还是看看别人怎么起线程,然后再改代码吧。
最好看着格式改,不然多走冤枉路!
如果还不懂,那么建议看看C++语言吧。
不然开始就来起线程,也不是那么简单。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询